博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【洛谷 p3386】模板-二分图匹配(图论)
阅读量:6419 次
发布时间:2019-06-23

本文共 1109 字,大约阅读时间需要 3 分钟。

题目:给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数。

解法:匈牙利算法。(以前我总是不记得......)实质上应该有贪心的思想,每次都尽量匹配,找到能和自己匹配的也尽量让它们匹配。若对方已有匹配的对象,就让那个对象尽量调整来使自己这对能凑起来。而要注意,每次问过的对象就不要再问了,也就是不要让它的对象总是换来换去......

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 7 const int N=1010,M=1010; 8 int n,m,e; 9 int vis[N][N];10 int ask[M],cp[M];11 12 bool ffind(int x)13 {14 for (int i=1;i<=m;i++)15 if (vis[x][i])16 {17 if (ask[i]) continue;18 ask[i]=1;19 if (!cp[i]||ffind(cp[i]))20 {cp[i]=x;return true;}21 }22 return false;23 }24 void getmatch()25 {26 int ans=0;27 memset(cp,0,sizeof(cp));28 for (int i=1;i<=n;i++)29 {30 memset(ask,0,sizeof(ask));31 if (ffind(i)) ans++;32 }33 printf("%d\n",ans);34 }35 int main()36 {37 scanf("%d%d%d",&n,&m,&e);38 for (int i=1;i<=e;i++)39 {40 int x,y;41 scanf("%d%d",&x,&y);42 vis[x][y]=1;43 }44 getmatch();45 return 0;46 }

 

转载于:https://www.cnblogs.com/konjak/p/6076835.html

你可能感兴趣的文章
asp.net 后台获取flv视频地址进行播放
查看>>
查看macbook是多少位
查看>>
ASP.NET 保存txt文件
查看>>
【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)...
查看>>
ASCII码表及键盘码表。
查看>>
angular学习笔记(二十三)-$http(1)-api
查看>>
CentOS 65 java 访问 MS SQL
查看>>
Oracle11g 搭建单实例DataGuard (转载)
查看>>
tar + find
查看>>
如何设置基线网络
查看>>
位运算符 优先级 折半搜索
查看>>
如何安全地关闭MySQL实例
查看>>
JavaFx初探
查看>>
MySQL添加字段和删除字段
查看>>
Git远程操作详解
查看>>
SVD神秘值分解
查看>>
账号密码管理系统Access版本
查看>>
【python】入门学习(一)
查看>>
javascript 正则表达式
查看>>
转:ViewPager+Fragment基本使用方法(附源码)
查看>>