这道题是想做并查集的,但是并查集的题解也都通不过欸。因为这个和朋友圈不一样,如果老师有手机号的人没有老师手机号,也还是照样联系不上,所以只能通过这个点所能走的路去走,而不是看他们在没在同一个圈子
bfs的思想
1 建图
2 找开始的点
3 找开始的点能走的点
4 能走的点找能走的点
5 做标记,找过了就不找了
6 终止条件,找到这个人了
题的思想
同
///表示bfs
//表示题
#include<bits/stdc++.h>
using namespace std;
int g[55][55];
int n,m;
int bfs()
{
int vis[55]={0}; //为这个人做标记
queue<int>q;
q.push(1);
vis[1]=1; //先把第一个人做标记
while(!q.empty()) ///队列不为空就可以继续进行
{
int now=q.front(); ///bfs,搜索队头
q.pop(); ///这个点就出队列
for(int j=1;j<=n;j++) ///逐个搜索这个点附近能走的点
if(vis[j]==0&&g[now][j]==1) //这个人能联系到这个人并且这个人没有被搜索过
{ //已经搜索过不是这个人就没有必要再次搜索了
vis[j]=1;
if(j==n) return 1; ///终止条件
q.push(j); ///这个能走的点就入队列
}
}
return 0;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
int x,y;
memset(g,0,sizeof(g));
while(m--)
{
cin>>x>>y;
g[x][y]=1; ///建图
}
if(bfs()) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}