标签:ons nim uniq case prevent group list opera rate
Time Limit: 1000MS | Memory Limit: 20000K | |
Total Submissions: 37090 | Accepted: 17980 |
Description
Input
Output
Sample Input
100 4 2 1 2 5 10 13 11 12 14 2 0 1 2 99 2 200 2 1 5 5 1 2 3 4 5 1 0 0 0
Sample Output
4 1 1
Source
/* 题意:总共有n个学生编号0~n-1,总共m个社团,现在0号学生是可能感染病菌的学生,那么和他在一个社团的学生需要 被隔离,这些学生如果还在其他社团的话,那么那个社团的所有学生也要被隔离,现在问你需要隔离多少学生 初步思路:并查集,用一个数组来维护一棵树的节点数量,所有只需要输出0所在的树的节点数量就行了 */ #include <iostream> #include <stdio.h> using namespace std; int n,m; int a,last; int k; int bin[30005]; int num[30005]; int findx(int x){ int tmp=x; while(x!=bin[x]){ x=bin[x]; } bin[tmp]=x;//路径压缩 return x; } int bindx(int x,int y){ int fx=findx(x); int fy=findx(y); if(fx!=fy){ num[fy]+=num[fx];//这两个点相联合了,那么根节点的信息要加到一块 bin[fx]=fy; return 1; } return 0; } void init(){ for(int i=0;i<=n;i++){ bin[i]=i; num[i]=1; } } int main(){ // freopen("in.txt","r",stdin); while(scanf("%d%d",&n,&m)!=EOF&&(n+m)){ init(); while(m--){ scanf("%d",&k); for(int i=0;i<k;i++){ scanf("%d",&a); if(i){ bindx(a,last); } last=a; } } printf("%d\n",num[findx(0)]); } return 0; }
标签:ons nim uniq case prevent group list opera rate
原文地址:http://www.cnblogs.com/wuwangchuxin0924/p/6696308.html