hdu 1272 小希的迷宫
给你多组n和m,表示,n和m联通,判断是否存在回路,若存在,输出Yes,否则为No
成回路时,输入的两个有共同的根节点。
只连通时,根节点为1,
#include"stdio.h" int set[100005],visit[100005],flag; int find(int x) { int i,r; while(set[r]!=r) r=set[r]; while(r!=set[x]) { i=set[x]; set[x]=r; x=i; } return r; } void merge(int x,int y) { int fx,fy; fx=find(x); fy=find(y); if(fx<fy)set[fy]=fx; else if(fy<fx)set[fx]=fy; else flag=0; } int main() { int i,n,m,cnt; while(scanf("%d%d",&n,&m)!=EOF) { if(n==0&&m==0) { printf("Yes\n");continue; } if(n==-1&&m==-1) break; for(i=1;i<=100000;i++) { set[i]=i; visit[i]=0; } flag=1; visit[n]=visit[m]=1; merge(n,m); while(scanf("%d%d",&n,&m)!=EOF&&n!=0) { merge(n,m); visit[n]=visit[m]=1; } cnt=0; for(i=1;i<=100000;i++) { if(visit[i]&&set[i]==i) cnt++; if(cnt>1) flag=0; } if(flag) printf("Yes\n"); else printf("No\n"); } return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步