挑战 poj 3041 二分图最大匹配算法 (匈牙利算法)
来源:互联网 发布:爱淘宝天猫购物券 编辑:程序博客网 时间:2024/06/07 22:02
原来这就是匈牙利算法,,,
就是用来求二分图最大匹配的算法。。
代码比较短。。
还有就是这里V会是1000, 所以maxn为1005;
#include<iostream>#include<string>#include<cstring>#include<algorithm>#include<cstdio>#include<vector>#include<queue>using namespace std;#define mem(a,b) memset(a,b,sizeof(a));#define sf scanf#define pf printf#define LL long long#define bug1 cout<<"bug1"<<endl;#define bug2 cout<<"bug2"<<endl;#define bug3 cout<<"bug3"<<endl;const int maxn=1005;int V;vector<int>G[maxn];int match[maxn];bool used[maxn];void addedge(int u,int v){ G[u].push_back(v); G[v].push_back(u);}bool dfs(int v){ used[v]=true; for(int i=0;i<G[v].size();++i){ int u=G[v][i],w=match[u]; if(w<0||!used[w]&&dfs(w)){ match[v]=u; match[u]=v; return true; } } return false;}int biparitte_matching(){ int res=0; mem(match,-1); for(int v=0;v<V;++v){ if(match[v]<0){ mem(used,0); if(dfs(v)){ res++; } } } return res;}int n,k;int R[10005],C[10005];int main(){ while(~sf("%d%d",&n,&k)){ V=n*2; for(int i=1;i<=k;++i){ sf("%d%d",&R[i],&C[i]); } for(int i=1;i<=k;++i){ addedge(R[i]-1,n+C[i]-1);//G[i] } int res=biparitte_matching(); pf("%d\n",res); }}
0 0
- 挑战 poj 3041 二分图最大匹配算法 (匈牙利算法)
- poj 3041 Asteroids (匈牙利算法---二分图最大匹配)
- POJ 3041 Asteroids 匈牙利算法 二分图最大匹配
- POJ-3041 匈牙利算法 二分图最大匹配
- POJ 1469 COURSES(匈牙利算法二分图最大匹配)
- 二分图最大匹配(匈牙利算法)
- 二分图最大匹配(匈牙利算法)
- 二分图最大匹配(匈牙利算法)
- 匈牙利算法(二分图最大匹配)
- 二分图最大匹配(匈牙利算法)
- 二分图最大匹配(匈牙利算法)
- 二分图最大匹配(匈牙利算法)
- 二分图最大匹配(匈牙利算法)
- 二分图最大匹配(匈牙利算法)
- 二分图最大匹配(匈牙利算法)
- 二分图最大匹配(匈牙利算法)
- 匈牙利算法(二分图最大匹配)
- 二分图最大匹配算法-匈牙利算法
- 机器学习模型LaTeX公式版:支持向量机
- android 处理软键盘弹出时的一种方法
- 位运算的奇淫技巧
- 原生js+cookie实现购物车功能
- Flink Java与Scala的Api类型不匹配问题
- 挑战 poj 3041 二分图最大匹配算法 (匈牙利算法)
- oj383. Ransom Note
- 关于EasyUI中阻止事件冒泡
- nginx配置location总结及rewrite规则写法
- arcgis aip for js 4.X 出现跨域问题
- x265代码阅读:码率控制(二)
- (四)Mac OS中Java Servlet与Http通信
- 重要学习网址
- 查询一个内存分区的状态,OSMemQuery()