原来以为是强联通,后来经同学提醒,转化一下思路,如果是符合条件的图,那肯定可以到达1这一点,大概就是dfs的一个变型。
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<iostream>
using namespace std;
int mp[10024];
int dfs(int y)
{
if(mp[y]==y)
return mp[y];
mp[y]=dfs(mp[y]);
return mp[y];
}
int main()
{
int n,m,x,y,f;
while(~scanf("%d%d",&n,&m))
{
if(n==0&&m==0) break;
for(int i=0; i<=n; i++) mp[i]=i;
for(int i=0; i<m; i++)
{
scanf("%d%d",&x,&y);
if(x!=1)
mp[x]=dfs(y);
}
f=1;
for(int i=1; i<=n; i++)
{
//printf("%d
",mp[i]);
if(dfs(mp[i])!=1)
{
f=0;
break;
}
}
if(f) printf("Yes
");
else printf("No
");
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/