tyvj1017 - 冗余关系 ——并查集

题目链接:https://www.tyvj.cn/Problem_Show.aspx?id=1017

并查集

 1 #include <cstdio>
 2 #include <cstdlib>
 3 using namespace std;
 4 int parent[1001],n,m;
 5 void init() {for(int i=1;i<=m;++i)parent[i]=-1; }
 6 int Find(int x) {int s; for(s=x;parent[s]>=0;s=parent[s]);while (s!=x) {int tmp=parent[x];parent[x]=s;x=tmp; }return s; }
 7 void Union(int R1,int R2)
 8 {
 9     int r1=Find(R1),r2=Find(R2),tmp=parent[r1]+parent[r2]; if (parent[r1]<parent[r2]) parent[r2]=r1,parent[r1]=tmp;
10     else parent[r1]=r2,parent[r2]=tmp;
11 }
12 int main(void)
13 {
14     freopen("in1.txt","r",stdin);
15     int cnt=0;scanf("%d%d",&n,&m); init();
16     while (n--) {
17         int a,b; scanf("%d%d",&a,&b); if(Find(a)==Find(b)) cnt++;
18         else Union(a,b);
19     } printf("%d\n",cnt);
20     return 0;
21 }

=_=

posted on 2013-07-07 23:22  aries__liu  阅读(369)  评论(0编辑  收藏  举报