hdu1856

求最大连通块……

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e7+10;
const int maxm=2*1e5+10;
int vis[maxn];
int beg[maxn],nex[maxn],to[maxn],e;
inline void add(int x,int y){
    e++;nex[e]=beg[x];
    beg[x]=e;to[e]=y;
}
inline int dfs(int x){
    vis[x]=1;
    int cnt=1;
    for(int i=beg[x];i;i=nex[i]){
        int t=to[i];
        if(!vis[t])cnt+=dfs(t);
    }
    return cnt;
}
int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        int x,y;
        e=0;
        memset(vis,0,sizeof(vis));
        memset(beg,0,sizeof(beg));
        for(int i=1;i<=n;i++){
            scanf("%d%d",&x,&y);
            add(x,y),add(y,x);
        }
        int ans=0;
        for(int i=1;i<=10000000;i++)
            if(!vis[i])
                ans=max(ans,dfs(i));
        printf("%d
",ans);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/syzf2222/p/12393932.html