ACM HDU 1232 交通工程 并查集
#include<iostream> #include<cstdio> using namespace std; int city[1005]; int sum; int find(int x) { int r=x; while(city[r]!=r) { r=city[r]; } return r; } void mege(int x,int y) { int fx,fy; fx=find(x); fy=find(y); if(fx!=fy) { if(fx>fy) city[fx]=fy; else city[fy]=fx; sum++; } } int main() { int Tc;int Tr; while(scanf("%d",&Tc)&&Tc) { int i=1; sum=0; for(;i<=Tc;i++) city[i]=i; scanf("%d",&Tr); int l,r; int x,y; for(i=0;i<Tr;i++) { scanf("%d%d",&l,&r); x=find(l); y=find(r); if(x>y) city[x]=y; else city[y]=x; } for(i=1;i<=Tc-1;i++) { mege(i,i+1); } cout<<sum<<endl; } return 0; }
哈哈,经过老师的指导和本人的努力,以及热心网友的帮助。。。。我终于又A一题,这个并查集做的,而且由于算法复杂度不高,我进行了合并树(特别指明。。。一定要用一棵树的根 接到另一棵树(根或节点都可以),(本人SB了一个晚上,将一颗树的子树接都另一棵树,结果头爆了一个晚上,最后一位热心网友出现后。。。。TAT,感动~~~~~~~~)
posted on 2012-04-11 16:46 笨-Archangel 阅读(117) 评论(0) 收藏 举报
浙公网安备 33010602011771号