zoukankan      html  css  js  c++  java
  • 团伙 封锁阳光大学

    团伙

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int maxn = 2e5+7;
    int fa[maxn],en[maxn],size[maxn];
    int n,m;
    int find(int x)  
    {  
        if (fa[x] == x) return x;
        return fa[x] = find(fa[x]); 
    }
    
    void merge(int x, int y)
    {
        int fx = find(x);
        int fy = find(y);
        if (fx == fy) return;
        if (size[fx]<size[fy]) swap(fx, fy);  
        size[fx]+=size[fy];
        fa[fy] = fx;
        return;
    }
    
    int main(){
        cin>>n>>m;
        for(int i = 1;i <= n;i ++){
            fa[i] = i;
            size[i]=1;
        }
        for(int i = 1;i <= m;i ++){
            char a;int b,c;
            cin>>a>>b>>c;
            if(a == 'F'){
                merge(b,c);
                if(!en[b]&&!en[c]) merge(en[b],en[c]);
            }
            if(a == 'E'){
                if(en[c]!=0) merge(b,en[c]); 
                if(en[b]!=0) merge(c,en[b]);
                en[b]=c;en[c]=b;
            }
        }
        int ans = 0;
        for(int i = 1;i <= n;i ++){
            if(fa[i] == i) ans++;        
        }
        cout<<ans<<endl;
        return 0;
    }

    封锁阳光大学

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int maxn=100007;
    int enm[maxn],fa[maxn],ff,ans,sz[maxn];
    bool vis[maxn];
    int find(int a){
        if(fa[a]==a) return fa[a];
        return fa[a]=find(fa[a]);
    }
    void merge(int a,int b){
        int aa=find(a);
        if(aa!=b){
            fa[b]=aa;
            sz[aa]+=sz[b];
        }
    }
    int main(){
        int n,m;cin>>n>>m;
        for(int i=1;i<=n;i++) {sz[i]=1;fa[i]=i;}
        for(int i=1;i<=m;i++){
            int u,v;cin>>u>>v;
            int uu=find(u),vv=find(v);
            if(uu!=vv){
                if(enm[u]) merge(enm[u],vv);
                if(enm[v]) merge(enm[v],uu);
                enm[u]=vv;enm[v]=uu;
            }
            if(uu==vv){
                cout<<"Impossible"<<endl;
                return 0;
            }
        }
        for(int i=1;i<=n;i++){
            int ff=find(i);
            if(!vis[ff]){
                int pp=find(enm[i]);
                vis[ff]=true;vis[pp]=true;
                ans+=min(sz[ff],sz[pp]);
            }
        }
        cout<<ans<<endl;
        return 0;
        
    }
  • 相关阅读:
    background和background-size
    获取表单的初始值,模拟placeholder属性
    input[type=checkbox]
    background-size
    input的type属性的修改
    选项卡切换
    2016.12.13
    3. 如何封装查询条件与查询结果到map中
    Java 实现网站当前在线用户统计
    sell-- wordPOI
  • 原文地址:https://www.cnblogs.com/lcan/p/9454470.html
Copyright © 2011-2022 走看看