//使用并查集,按照佳哥方法写的,具体的数据机构还没看 //真是特么的弱 今天准备看完msmf白书+并查集+tarjan+无向图msmf,明天km+匈牙利 #include <cstdio> #include <iostream> #include <memory.h> using namespace std; const int MAX=30050,SIZE=2*500050,INF=1<<30; int n,m,l,U[SIZE],V[SIZE],first[MAX], next[SIZE],maxVal, pa[MAX],res[MAX]; int find(const int &x){ return pa[x]==x?x:pa[x]=find(pa[x]); } int main() { freopen("i.txt","r",stdin); int nCase,u,v,x,y,e; cin>>nCase; //cout<<nCase<<endl; while(nCase--){ l=0; memset(pa,0,sizeof(pa)); memset(first,-1,sizeof(first)); cin>>n>>m; if(!m){ cout<<0<<endl; continue; } for(int i=1;i<=n;i++) pa[i]=i; for(int i=0;i<m;i++){ cin>>u>>v; U[l]=u; V[l]=v; next[l]=first[u]; first[u]=l++; U[l]=v; V[l]=u; next[l]=first[v]; first[v]=l++; } for(u=1;u<=n;u++){ for(e=first[u];e!=-1;e=next[e]){ v=V[e]; x=find(u); y=find(v); if(x!=y) pa[y]=x; } } memset(res,0,sizeof(res)); maxVal=0; for(int i=1;i<=n;i++){ //cout<<i<<" "<<pa[i]<<endl; ++res[find(i)]; if(maxVal<res[pa[i]]) maxVal=res[pa[i]]; } cout<<maxVal<<endl; } return 0; }