POJ 1719 Shooting Contest G++ 二分图匹配 没掌握
程序员文章站
2022-07-15 11:02:34
...
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
//英语 看博友分析 抄博友程序 二分图匹配 没掌握
int g[1008][1008];
int vis[1008];
int link[1008];
int r,c;
int dfs(int x)
{
for(int i=1;i<=c;i++)
{
if(vis[i]==0 && g[x][i]==1)//背
{
vis[i]=1;
if(link[i]==0 || dfs(link[i]))
{
link[i]=x;
return 1;
}
}
}
return 0;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&r,&c);//r行 c列
memset(g,0,sizeof(g));
memset(link,0,sizeof(link));
for(int i=1;i<=c;i++)
{
int x,y;
scanf("%d%d",&x,&y);
g[x][i]=g[y][i]=1;//每列有两个白格
}
int ans=0;
for(int i=1;i<=r;i++)
{
memset(vis,0,sizeof(vis));
if(dfs(i))
{
ans++;
}
}
if(ans==r)
{
//抄博友程序 没掌握
for(int i=1;i<=c;i++)
{
if(link[i]!=0)
{
cout<<link[i]<<" ";
}else
{
for(int j=1;j<=r;j++)
if(g[j][i]==1)
{
//cout<<"*";
cout<<j<<" ";
break;
}
}
}
cout<<endl;
}else
{
printf("NO\n");
}
}
return 0;
}