您的位置:首页 > 其它

ural 1109,NYOJ 239,匈牙利算法邻接表

2016-09-19 00:25 239 查看
NYOJ 239:http://acm.nyist.net/JudgeOnline/problem.php?pid=239

ural 1109 :http://acm.timus.ru/problem.aspx?space=1&num=1109

NYOJ 月老的难题,是裸的最大匹配,很烦的是邻接阵超时。改用邻接表。

#include <bits/stdc++.h>
using namespace std;
#define maxn 1005

vector <int> G[maxn];
bool use[maxn];
int match[maxn];
int m,n,k;

bool dfs(int u)
{
for(int i=0;i<G[u].size();i++)
{
if(use[G[u][i]]==false)
{
use[G[u][i]] = true;
if(match[G[u][i]]==-1||dfs(match[G[u][i]]))
{
match[G[u][i]] = u;
return true;
}
}
}
return false;
}

int main()
{

scanf("%d%d%d",&m,&n,&k);
for(int i=0;i<k;i++)
{
int u,v;
scanf("%d%d",&u,&v);
G[u].push_back(v);
}
memset(match,-1,sizeof(match));
int ans = 0;
for(int i=1;i<=m;i++)
{
memset(use,0,sizeof(use));
if(dfs(i))
ans ++;
}
printf("%d\n",m+n-ans);
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: