HDU 1272 小希的迷宫
2013-04-09 14:14
302 查看
并查集判断连通和环路,注意输入如果是只有0 0 要输出yes
代码有点臭
代码有点臭
#include <iostream> #include <cstdio> using namespace std; const int maxn=100010; int id[maxn],size[maxn],n; bool in[maxn]; int find(int p){ return p==id[p]?p:id[p]=find(id[p]); } bool uni(int p,int q){ int pp=find(p),pq=find(q); if(pp==pq)return false; if(size[pp]>size[pq]){ id[pq]=pp; size[pp]+=size[pq]; }else{ id[pp]=pq; size[pq]+=size[pp]; } return true; } void clear(){ for (int i=1;i<maxn;++i){ id[i]=i; size[i]=1; in[i]=0; } } int main(){ int u,v; while (scanf("%d%d",&u,&v)) { if(u==-1&&v==-1)break; int f=0,f2=0,maxi=0; clear(); while (u!=0&&v!=0) { f2++; in[u]=1; in[v]=1; maxi=max(maxi,max(u,v)); if(!f&&!uni(u,v)){ f=1; } scanf("%d%d",&u,&v); } if(f2==0){ printf("Yes\n"); } else if(f==0){ int cnt=0; for (int i=1;i<=maxi;++i) { if(in[i]&&id[i]==i)cnt++; } if(cnt==1)printf("Yes\n"); else printf("No\n"); }else{ printf("No\n"); } } return 0; }
相关文章推荐
- 用并查集检查连通性~HDU 1272 小希的迷宫(并查集)
- hdu 1272 小希的迷宫(并查集)
- HDU 1272 小希的迷宫(并查集判断有无成环)
- HDU 1272 小希的迷宫
- [ACM] hdu 1272 小希的迷宫(并查集)
- HDU 1272 小希的迷宫
- hdu 1272小希的迷宫 并查集
- hdu1272小希的迷宫 (并查集应用)
- hdu 1272 小希的迷宫
- HDU 1272 小希的迷宫(并查集)
- HDU1272---小希的迷宫
- HDU 1272 小希的迷宫
- hdu 1272 小希的迷宫(并查集)
- HDU 1272 小希的迷宫(并查集)
- HDU 1272 小希的迷宫
- HDU - 1272 小希的迷宫
- 【HDU 1272 小希的迷宫】
- hdu1272 小希的迷宫 (并查集)
- HDU-1272 小希的迷宫 (并查集)
- hdu 1272 小希的迷宫