解题思路:并查集思想
#include <stdio.h> #define Max 30000+1 int book[Max]; int f[Max]; int n,m; int getf(int x) { if(f[x]==x) return x; else return f[x]=getf(f[x]); } void Merge(int x,int y) { int a=getf(x); int b=getf(y); f[b]=a; } int Init() { scanf("%d %d",&n,&m); int i; for(i=1; i<=n; i++) { f[i]=i; book[i]=0; } for(i=0; i<m; i++) { int x,j; scanf("%d",&x); int a[x]; for(j=0; j<x; j++) { scanf("%d",&a[j]); } for(j=1; j<x; j++) { Merge(a[j-1],a[j]); } } } void FindMax() { int i; for(i=1; i<=n; i++) { book[getf(i)]++; } int ans=0; for(i=1;i<=n;i++) { if(book[i]>ans) ans=book[i]; } printf("%d",ans); } int main() { Init(); FindMax(); return 0; }