タイトル説明
最近、科学者たちは、二人の間に愛があることがわかります。AがBを愛していない場合たとえば、AとBの間で、その後、Bはその逆、Aを愛さなければなりません。そして、二人はお互いに、どのような狂気の世界を愛している可能性はありません!
今、科学者たちはN人々の間で「トライアングル愛」があるかどうかを知りたいです。任意の3人(A、BおよびC)のうち、AがBを愛している「トライアングルラブ」の手段は、BはC愛し、CはA.愛して
いるか否かあなたの問題は、まずNの人々の間の関係を読み取るためのプログラムを書いている、とリターンを「トライアングル愛」があります。入力形式
最初の行は、単一の整数t(1 <= T <= 15)、テストケースの数を含んでいます。
各場合について、最初の行は、N(0 <N <= 2000)整数一方を含みます。
次のn行に(スペースなし)の関係の隣接行列Aを含みます。愛、J = 1つの手段は、i番目の人は、j番目の人、そうでない場合は愛、J = 0が大好き
与えられた関係は、愛であるトーナメント、であることが保証されて、私は0、愛、J≠Ajとを=を、I (1 <= I、J <= N、I≠j)とします。出力フォーマット
図示した後、印刷し、これらのN人のうち、「トライアングル愛」がある場合、それぞれの場合のために、出力は、ケース番号が「はい」、そうでない場合は「いいえ」を印刷します。
詳細については、サンプルの出力を取ります。サンプル入力
2
5
00100
10000
01001
11101
11000
5
01111
00000
01000
01100
01110
サンプル出力
ケース#1:はい
ケース#2:いいえ
分析
タイトル効果所与のn頂点が有向グラフは、それがトポロジカルソートか否かが判断されます。
それはトポロジカルに代表リングをソートすることができないかどうかを判断するためにストレートのテンプレート。
ソース
#include <bits/stdc++.h>
#define MAXN 2005
using namespace std;
int t,n,cnt=0,in[MAXN];
bool g[MAXN][MAXN];
int read()
{
int sum;
char c=getchar();
while(c<'0'||c>'9')c=getchar();
sum=c-'0';
return sum;
}
bool TopSort()
{
queue<int> q;
for(int i=1;i<=n;i++)
if(!in[i])q.push(i);
int k=0;
while(!q.empty()){
int u=q.front();
q.pop();
k++;
for(int i=1;i<=n;i++)
if(g[u][i]){
in[i]--;
if(!in[i])q.push(i);
}
}
if(k!=n)return false;
return true;
}
int main()
{
scanf("%d",&t);
while(t--){
memset(in,0,sizeof(in));
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
int tmp=read();
g[i][j]=tmp;
if(tmp)in[j]++;
}
}
if(TopSort())printf("Case #%d: No\n",++cnt);
else printf("Case #%d: Yes\n",++cnt);
}
}