2016.7.17 二分图匹配
来源:互联网 发布:软件著作权 个人申请 编辑:程序博客网 时间:2024/05/04 17:14
今天学了一个炒鸡厉害的算法(听说是高端的图论时我们都自觉膜拜了好多次)二分图匹配;通过增广路发现了一件事:两个人都出轨的话,就多了一对情侣诶(呃!(还可以改进匹配诶)
参考资料:
1.不知道哪来的PPT;
2.小蓝;
基础概念:
1.二分图:设G=(V,{R})是一个无向图。如顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属两个不同的子集。则称图G为二分图.(并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B) )
2.启发性:由一个方法可以自己借鉴解决其他许多问题;
一.完美的牛栏 poj1274
题意:二分完美匹配,n,m,<=200;
题目分析:这是一道很显然的二分图匹配,作用就是检测了我的理解(因为我的习惯是不看模板)
#include<cstdio>#include<iostream>#include<cmath>#include<cstdlib>#include<cstring>#include<string>#include<algorithm>#include<queue>#include<set>using namespace std;int n,m,ovo[205][205],match[205],visited[205],cnt,mini,maxn,s,c;bool hungary(int k){ for(int i=1;i<=maxn;i++) if(!visited[i]&&ovo[k][i]) { visited[i]=1; if(match[i]==-1||hungary(match[i]))//我可以搞定!match[i]说道。 {//快一点变过来变过来~ match[i]=k;return true;//从maxn记向mini; } } return false;}int main(){ freopen("milk.in","r",stdin); freopen("milk.out","w",stdout); while(scanf("%d %d",&n,&m)==2)//cow,fence//poj多组数据坑爹啊 {memset(ovo,0,sizeof(ovo));cnt=0;//初始化一定要撤点! for(int i=1;i<=n;i++) { scanf("%d",&s); for(int j=1;j<=s;j++) { scanf("%d",&c); ovo[i][c]=1; } } mini=min(n,m);maxn=max(n,m); memset(match,-1,sizeof(match)); for(int i=1;i<=mini;i++) { memset(visited,0,sizeof(visited));//match是上次的地图君不清零! if(hungary(i))cnt++; } printf("%d\n",cnt); } return 0;}
visited找一次广增只每个点都最多经历一次;
for1-n 最多增加n个
cnt++每次只多一个
match不置0;
0 0
- 2016.7.17 二分图匹配
- 二分图图匹配
- 二分图匹配
- 二分图匹配
- 二分图匹配
- 二分图匹配
- 正则二分图匹配
- 二分图匹配
- 二分图匹配总结
- 二分图最大匹配
- 二分图最大匹配 。
- hdu2119二分图匹配
- 二分图匹配
- 二分图匹配
- 二分图匹配算法
- poj3020-二分图匹配
- 二分图匹配
- 二分图最大匹配
- 学习javascript数据结构(一)——栈和队列
- bzoj1079 [SCOI2008]着色方案
- 2016.7.15 NOIP2014模拟试题解题报告(又名:方克顺和他的正余弦朋友们(
- 2016.7.16 树相关知识的复习
- 2016.7.17 对拍小技巧总结
- 2016.7.17 二分图匹配
- 2016.7.18 memset小技巧总结
- 100. Same Tree
- 冷水机控制板
- 2016.7.18 NOIP2014提高组day1解题报告
- 2016.7.19 编程易错小知识点集锦
- 第十周 利用二叉树遍历思想解决问题
- 原生JS实现中文简繁切换
- OpenLayers WFS 代理Proxy.cgi设置之Tomcat篇