标签:des style class code java http
二分图匹配:
最大匹配数=最大独立集=最小点覆盖
最小路径覆盖=点数-最大匹配数
4 0:(1) 1 1:(2) 2 3 2:(0) 3:(0) 5 3:(3) 1 4 2 1:(1) 0 2:(0) 0:(0) 4:(0)
1 2
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=2000;
struct Edge
{
int to,next;
}edge[maxn*maxn];
int Adj[maxn],Size;
void init()
{
Size=0;
memset(Adj,-1,sizeof(Adj));
}
void Add_Edge(int u,int v)
{
edge[Size].next=Adj[u];
edge[Size].to=v;
Adj[u]=Size++;
}
int n;
/**************hungary************/
int linker[maxn];
bool used[maxn];
bool dfs(int u)
{
for(int i=Adj[u];~i;i=edge[i].next)
{
int v=edge[i].to;
if(!used[v])
{
used[v]=true;
if(linker[v]==-1||dfs(linker[v]))
{
linker[v]=u;
return true;
}
}
}
return false;
}
int hungary()
{
int res=0;
memset(linker,-1,sizeof(linker));
for(int u=0;u<n;u++)
{
memset(used,false,sizeof(used));
if(dfs(u)) res++;
}
return res;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
init();
for(int i=0;i<n;i++)
{
int u,v,m;
scanf("%d:(%d)",&u,&m);
for(int j=0;j<m;j++)
{
scanf("%d",&v);
Add_Edge(u,v);
Add_Edge(v,u);
}
}
printf("%d\n",hungary()/2);
}
return 0;
}
HDOJ 1054 Strategic Game,布布扣,bubuko.com
标签:des style class code java http
原文地址:http://blog.csdn.net/ck_boss/article/details/32343503