hpuojCZY的工程【并查集】

来源:互联网 发布:不要网络的极品时刻表 编辑:程序博客网 时间:2024/06/14 04:39

1696: CZY的工程

时间限制: 1 Sec  内存限制: 128 MB
提交: 74  解决: 39
[提交][状态][讨论版]

题目描述

CZY总是遇到这样或那样的问题,现在他又遇到了一个,CZY接到一个大的工程,想想这是走上人生巅峰的第一步啊,CZY想想就高兴,可是这个工程太大了,他需要很多人的帮助才可以,但是为了方便工作,CZY希望他的团队两人两人之间都是朋友关系,或者间接是朋友关系。毕竟是大油水的工程啊,来了一群小伙伴报名,CYZ想请聪明的你帮忙算一算,他可以招到的最大的人数是多少

输入

输入包含多组测试数据,每组测试数据第一行一个n,表示来报名的小伙伴们的编号1-100,后边接n行,每行两个整数a b,表示编号a和b的小伙伴是朋友关系

输出

输出包括一行,即CZY可以招到的最大的人数是多少

样例输入

41 23 45 61 6

样例输出

4
#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>#include<queue>#define maxn 105using namespace std;int per[maxn],ran[maxn];int n,sum;void init(){sum=0;for(int i=0;i<=100;i++){per[i]=i;    ran[i]=1;}    }int find(int x){if(x==per[x])  return x;return per[x]=find(per[x]);}void join(int x,int y){int fx=find(x);int fy=find(y);if(fx!=fy){per[fx]=fy;ran[fy]+=ran[fx];sum=max(ran[fy],sum);}      }int main(){int a,b;while(scanf("%d",&n)!=EOF){init();if(n==0)   printf("1\n");while(n--){scanf("%d%d",&a,&b);join(a,b);}printf("%d\n",sum);}return 0;}

0 0
原创粉丝点击