トライアングルLOVE(HDU 4324)

トピックリンク

タイトル説明

最近、科学者たちは、二人の間に愛があることがわかります。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);
	}
}
公開された19元の記事 ウォンの賞賛0 ビュー132

おすすめ

転載: blog.csdn.net/weixin_43960284/article/details/105237223