#include<iostream> using namespace std; #define Size 30000 int Pre[Size+1], Sum[Size+1];// Sum[i] 表示 第i组 的人数 int Get_Pre( int a ) { if( Pre[a]!=a ) a = Get_Pre( Pre[a] );// 路径压缩 return a; } void Union( int a, int b ) { int P1 = Get_Pre(a); int P2 = Get_Pre(b); if( P1 == P2 ) return ; Pre[P2] = P1; Sum[P1] += Sum[P2]; } int main() { int n, m; while( cin>>n>>m && n!=0 ) { for( int i=0; i<n; i++ ) { Pre[i] = i; Sum[i]=1; } int k, N1, N2; for( int i=0; i<m; i++ ) { cin>>k; cin>>N1; for( int j= 1; j<k; j++ ){ cin>>N2; Union( N1, N2 ); } } cout<<Sum[Get_Pre(0)]<<endl; } return 0; }
时间: 2024-12-26 19:15:20