很简单的一个并查集板子题,只不过要注意一点,当输入的x等于n时不能将他们相连,别的就是模板了。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,m,pre[55],a,b;
int find(int x)
{
if(pre[x]==x)
return x;
else
return pre[x]=find(pre[x]);
}
void unit()
{
for(int i=1;i<=n;i++)
pre[i]=i;
}
void unio(int a,int b)
{
int tr1=find(a),tr2=find(b);
if(tr1!=tr2)
pre[tr1]=tr2;
}
int main ()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
unit();
for(int i=1;i<=m;i++)
{
cin>>a>>b;
if(a!=n)
unio(a,b);
}
if(find(1)==find(n))
{
cout<<"Yes"<<endl;
}
else
cout<<"No"<<endl;
}
return 0;
}