1 条题解

  • 0
    @ 2025-9-10 0:11:57

    C++ :

    //AUTHOR::STDAFX
    //ALGORITHM::Hungary
    
    #define MAXN 2010UL
    #define MAXQ 2000010UL
    
    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    
    void Work();
    inline void Build(int,int);
    bool dfs(int);
    
    struct Edge{
        int v,nx;
    };
    
    Edge edge[MAXQ];
    
    int link[MAXN],headlist[MAXN],gs,node,pt,ans,edge_cs,n;
    bool used[MAXN];
    
    int main(){
        while(~scanf("%d",&n)){
            Work();
        }
        return 0;
    }
    
    inline void Build(int u,int v){
        edge[++edge_cs].v=v;
        edge[edge_cs].nx=headlist[u];
        headlist[u]=edge_cs;
        return;
    }
    
    bool dfs(int u){
        for(int i=headlist[u];i!=-1;i=edge[i].nx){
            if(!used[edge[i].v]){
                used[edge[i].v]=1;
                if(link[edge[i].v]==-1||dfs(link[edge[i].v])){
                    link[edge[i].v]=u;
                    return true;
                }
            }
        }
        return false;
    }
    
    void Work(){
        memset(link,-1,sizeof(link));
        memset(headlist,-1,sizeof(headlist));
        ans=0;edge_cs=0;
        for(int i=0;i<n;i++){
            scanf("%d%d",&node,&gs);
            for(int j=1;j<=gs;j++){
                scanf("%d",&pt);
                Build(node,pt);
                Build(pt,node);
            }
        }
        for(int i=0;i<n;i++){
            memset(used,0,sizeof(used));
            if(dfs(i)){
                ans++;
            }
        }
        printf("%d\n",ans>>1);
        return;
    }
    
    • 1

    信息

    ID
    3211
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者