HDU 1054 Strategic Game

匈牙利算法模板题

#include <bits/stdc++.h>
#include<vector>
using namespace std;
const int N=1600;
int v[N],used[N];
vector<int>q[N];
bool dfs(int u)
{
    int i,j;
    for(i=0; i<q[u].size(); i++)
    {
        int t=q[u][i];
        if(!v[t])
        {
            v[t]=1;
            if(used[t]==-1||dfs(used[t]))
            {
                used[t]=u;
                return true;
            }
        }
    }
    return false;
}
int main()
{
    int n,i,j,k,a,b;
    while(~scanf("%d",&n))
    {
        for(i=0; i<=n; i++)
            q[i].clear();
        int sum=0;
        for(i=0; i<n; i++)
        {
            scanf("%d:(%d)",&a,&k);
            while(k--)
            {
                scanf("%d",&b);
                q[a].push_back(b);
                q[b].push_back(a);
            }
        }
        memset(v,0,sizeof(v));
        memset(used,-1,sizeof(used));
        for(i=0; i<n; i++)
        {
            memset(v,0,sizeof(v));
            if(dfs(i))
                sum++;
        }
        printf("%d
",sum/2);
    }
}
原文地址:https://www.cnblogs.com/nr1999/p/9636682.html