Ural1109 Conference(二分图匹配)
来源:互联网 发布:一个顶级域名多少钱 编辑:程序博客网 时间:2024/06/06 13:17
题目大意:每个顶点要求至少连一条边,求覆盖完全部顶点的最少边数
思路:二分图匹配的模板题,每个顶点被一条边覆盖,则要用N+M条边。但每条匹配的边却覆盖着2个顶点,就少用1条边。因此,最多可以少用的边数恰等于最大匹配数。故有:
最少边数 = N + M - 最大匹配数
#include<cstdio>#include<cstring>using namespace std;int n,m,k;int cx[1010],cy[1010];bool vis[1010];struct T{int v;int next;}edge[101000];int cnt;int head[1010];void add_edge(int u,int v){edge[cnt].v = v;edge[cnt].next = head[u];head[u] = cnt++;}bool dfs(int u){for(int i = head[u]; i != -1; i = edge[i].next){int v = edge[i].v;if(!vis[v]){vis[v] = 1;if(cy[v] == -1||dfs(cy[v])){cy[v] = u;cx[u] = v;return true;}}}return false;}int maxmatch(){int res = 0;memset(cx,-1,sizeof cx);memset(cy,-1,sizeof cy);for(int i = 1; i <= n; i++){if(cx[i] == -1){memset(vis,0,sizeof vis);if(dfs(i)) res++;}}return res;}int main(){while(scanf("%d%d%d",&n,&m,&k) != EOF){memset(head,-1,sizeof head);for(int i = 1; i <= k; i++){int a,b;scanf("%d%d",&a,&b);add_edge(a,b);}printf("%d\n",n+m-maxmatch());}}
0 0
- Ural1109 Conference(二分图匹配)
- ural1109(二分图模板)
- ural 1109 Conference (二分图匹配)
- 【图论】【二分图匹配】[Ural 1109]Conference
- 二分图图匹配
- 二分图匹配
- 二分图匹配
- 二分图匹配
- 二分图匹配
- 正则二分图匹配
- 二分图匹配
- 二分图匹配总结
- 二分图最大匹配
- 二分图最大匹配 。
- hdu2119二分图匹配
- 二分图匹配
- 二分图匹配
- 二分图匹配算法
- 一位ACM过来人的心得
- #面向对象的三大基本特征
- 拆分单链表(a1,b1,a2,b2....an,bn)=(a1,...an)+(bn,...b1)
- iOS Error: build settings specify a provisioning profile with the UUID
- MCS速率计算公式
- Ural1109 Conference(二分图匹配)
- Listview 定位到哪一行
- 阿里云Linux新手入门一
- 一个优秀的程序员
- 如何对生产环境的JAVA应用进行远程调试
- Ubuntu下调试Android真机连接ADB的方法
- JVM 进阶 四
- STM32 SysTick 精确延时(非中断方式)
- struts1、struts2 遍历map<String,List<TItem>>