您的位置:首页 > 其它

二分匹配 月老的难题

2015-07-03 16:10 309 查看
#include<bits/stdc++.h>
using namespace std;
#define MAX 1010
int used[MAX];
int march[MAX];
vectorg[MAX];
bool dfs(int u)
{
for(int i=0; i<g[u].size(); i++)
{
if(!used[g[u][i]])
{
used[g[u][i]]=true;
if(march[g[u][i]]==-1||dfs(march[g[u][i]]))
{
march[g[u][i]]=u;
return true;
}
}
}
return false;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=0; i<=n; i++)
{
g[i].clear();
}
for(int i=1; i<=k; i++)
{
int x,y;
scanf("%d%d",&x,&y);
g[x].push_back(y+n);
}
memset(march,-1,sizeof(march));
int ans=0;
for(int i=1; i<=n; i++)
{
memset(used,0,sizeof(used));
if(dfs(i)) ans++;
}
printf("%d\n",ans);
}
return 0;
}


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