2066 三角恋
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 钻石 Diamond
题目描述 Description
人们的恋爱关系与如下特点:两个人a,b,如果a爱着b,那么b一定不爱a;如果a不爱b,那么b一定爱着a(yh的研究成果果然与众不同……)。
现在,yh想知道,在n个人当中,是否存在三角恋现象(即a爱着b,b爱着c,c爱着a)。
输入描述 Input Description
本题有多组测试数据
第一行一个整数t,表示有t组测试数据。
对于每组数据,第一行为一个整数n,表示共有n人。
接下来为n*n的0,1矩阵a,如果a[i,j]=1,则i爱着j,否则表示i不爱j;数据保证a[i,j]<>a[j,i]。
输出描述 Output Description
每组数据输出一行,如果存在三角恋,输出’Yes’,否则输出’No’。
样例输入 Sample Input
2
5
00100
10000
01001
11101
11000
5
01111
00000
01000
01100
01110
样例输出 Sample Output
Yes
No
数据范围及提示 Data Size & Hint
对于40%的数据,n≤10
对于100%的数据,n≤2000, t≤5
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int n,m,k,t,l; char s[2005]; int a[10001][10001]; bool pd; int b[100001]; inline void dfs(int x) { if(pd)return; for(int i=1;i<=n;++i) { if(a[x][i]&&(b[i]==0||b[i]==-1)) { if(pd)break; if(b[i]==-1) { pd=true; return; } b[i]=-1; dfs(i); } } b[x]=1; } int main() { cin>>t; while(t--) { scanf("%d\n",&n); for(int i=1;i<=n;++i) { gets(s); for(int j=1;j<=n;++j) a[i][j]=s[j-1]-‘0‘; } memset(b,0,sizeof(b)); pd=false; dfs(1); if(pd) cout<<"Yes"<<endl; else cout<<"No"<<endl; } }
时间: 2024-12-13 13:43:31