1 条题解

  • 1
    @ 2026-8-31 16:06:38

    water problem

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    #define lowbit(x) x&-x
    const int INF=0x3f3f3f3f3f3f3f3f;
    const int N=1e5+10;
    const int M=2e6+10;
    int fa[N];
    int siz[N];
    int find(int x){
        if(fa[x]==x) return x;
        return fa[x]=find(fa[x]);
    }
    void solve(){
        int n;
        cin>>n;
        for(int i=1;i<=n;i++){
    		fa[i]=i;
    		siz[i]=1;
    	}
        for(int i=1;i<=n;i++){
            int u,v;
            cin>>u>>v;
            if(find(u)==find(v)) continue;
            siz[find(v)]+=siz[find(u)];
            fa[find(u)]=find(v);
        }
        int ans=2;
        for(int i=1;i<=n;i++){
    		if(find(i)==i&&(siz[i]&1)){
    			ans=3;
    		}
    	}
        cout<<ans<<'\n';
    }
    signed main(){
        int t;
        cin>>t;
        while(t--){
    		solve();
    	}
        return 0;
    }
    

    信息

    ID
    3678
    时间
    1000ms
    内存
    512MiB
    难度
    省选/NOI-
    标签
    递交数
    1
    已通过
    1
    上传者