POJ 1611并查集

我发现以后写题要更细心,专心!

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
#include<limits.h>
#include<math.h>
#include<queue>
#include<stack>
#include<vector>
#define max(a, b) a>b?a:b;
#define min(a, b) a<b?a:b;
using namespace std;
const int N = 31000;

int f[N], r[N];
int Find(int x)
{
if(f[x]!=x)
f[x]=Find(f[x]);
return f[x];
}
int main()
{
int n, m, i, j, s, u, v;
while(scanf("%d%d", &n, &m), n+m)
{
for(i=0; i<n; i++)
{
f[i]=i;
r[i]=1;
}
for(i=0; i<m; i++)
{
scanf("%d%d", &s, &u);
int ru=Find(u);
for(j=1; j<s; j++)
{
scanf("%d", &v);
int rv=Find(v);
if(ru!=rv)
{
r[ru]+=r[rv];
f[rv]=ru;
}
}
}
int ans=Find(0);
printf("%d ", r[ans]);
}
return 0;
}

 
原文地址:https://www.cnblogs.com/wazqWAZQ1/p/4676066.html