codevs1222 二分图匹配
来源:互联网 发布:如何关闭windows shell 编辑:程序博客网 时间:2024/05/21 04:39
分析:先建边,这里可以直接标记那些边不能跑,然后直接aug的时候暴力枚举所有点,然后跑出来如果不是完美匹配肯定是none,否则的话,我们对于每一条已经连的边,断开来,看是否是完美匹配必须需要的边,如果是的话就输出。
#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std;int n,m;const int N=1e5+5;int boy[N],girl[N],del[2005][2005];bool vis[2005];inline bool find(int x){ fo(i,1,n) if (!vis[i]&&!del[x][i]) { vis[i]=1; if(!girl[i]||find(girl[i])) { girl[i]=x; boy[x]=i; return 1; } } return 0;}int main(){ scanf("%d",&n); int x,y; while (scanf("%d%d",&x,&y)&&x&&y) del[x][y]=1; int ans=0; fo(i,1,n) { memset(vis,0,sizeof(vis)); if (find(i))++ans; } if (ans!=n) { printf("none\n"); return 0; } bool flag=0; fo(i,1,n) { memset(vis,0,sizeof(vis)); int j=boy[i]; del[i][j]=1; girl[j]=0,boy[i]=0; if (!find(i)) { printf("%d %d\n",i,j); boy[i]=j,girl[j]=i,flag=1; } del[i][j]=0; } if (!flag)printf("none\n"); return 0;}
0 0
- codevs1222 二分图匹配
- 二分图图匹配
- 二分图匹配
- 二分图匹配
- 二分图匹配
- 二分图匹配
- 正则二分图匹配
- 二分图匹配
- 二分图匹配总结
- 二分图最大匹配
- 二分图最大匹配 。
- hdu2119二分图匹配
- 二分图匹配
- 二分图匹配
- 二分图匹配算法
- poj3020-二分图匹配
- 二分图匹配
- 二分图最大匹配
- Kubernetes 1.5部署安装dashboard
- Unity之API
- caffe训练出错:Error parsing text-format caffe.NetParameter: 10:1: Expected identifier
- 枚举类型
- idea Failed to start component
- codevs1222 二分图匹配
- iOS——Storyboard使用
- PAT(Python)-1020:月饼(25)
- kafka源码分析之一server启动分析
- 欢迎使用CSDN-markdown编辑器
- nyoj-背包问题(贪心)
- Snackbar源码解析
- 关于Jdbc调用存储过程得到返回值为0(null)的问题
- c语言文件的读写操作