月老的難題&&二分圖最大匹配模板&&http://acm.nyist.net/JudgeOnline/problem.php?pid=239
二分圖最大匹配:用鄰接矩陣超時,需要用鄰接表;
#include<cstdio>
#include<algorithm>
#include<string.h>
#include<stdlib.h>
#include<iostream>
#include<vector>
using namespace std;
const int N=512;
bool chk[N];
vector<int>vis[N];
int n;
int xM[N],yM[N];
bool SearchPath(int u)
{
int dd=vis[u].size(),yy;
for(int v=0;v<dd;v++)
{yy=vis[u][v];
if(!chk[yy])
{
chk[yy] = true;
if(yM[yy] == -1 || SearchPath(yM[yy]))
{
yM[yy]=u;
xM[u]=yy;
return true;
}
}
}
return false;
}
int MaxMatch()
{
int ret=0;
memset(xM,-1,sizeof(xM));
memset(yM,-1,sizeof(yM));
for(int u=1;u<=n;u++)
{
if(xM[u]==-1)
{
memset(chk,false,sizeof(chk));
if(SearchPath(u))
ret++;
}
}
return ret;
}
int main()
{
int t,k,u,v;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
memset(chk,false,sizeof(chk));
for(int i=0;i<N;i++)
vis[i].clear();
//memset(vis,false,sizeof(vis));
for(int i=1;i<=k;i++)
{
scanf("%d%d",&u,&v);
vis[u].push_back(v);
//vis[v].push_back(u);
}
printf("%d\n",MaxMatch());
}
return 0;
}
相關文章
- 《啊哈!演算法》我要做月老 ——二分圖最大匹配演算法
- 二分圖最大權完美匹配
- 二分圖最大匹配問題匈牙利演算法演算法
- 二分圖的最大匹配、完美匹配和匈牙利演算法演算法
- 匈牙利演算法--二分圖的最大匹配演算法
- 二分圖的最大匹配的匈牙利演算法演算法
- 二分圖最大匹配(匈牙利演算法)演算法
- 二分圖最小點覆蓋等於二分圖最大匹配
- 二分圖的最大匹配(匈牙利演算法)程式碼演算法
- hdu5090 匈牙利演算法二分圖最大匹配問題演算法
- 二分圖匹配
- HDU 2063 匈牙利演算法二分圖的最大匹配演算法
- 關於二分圖上的最大匹配、最小點覆蓋、最大獨立集以及最大權閉合子圖的聯絡
- hihocoder 1158 質數相關(二分圖匹配 最大獨立集)
- 對匈牙利演算法理解——對二分圖進行最大匹配的演算法演算法
- 演算法學習之路|二分圖的最大匹配—匈牙利演算法(Dfs實現)演算法
- 圖論-二分圖匹配匈牙利演算法圖論演算法
- KM演算法——二分圖的最佳匹配演算法
- 軟體工程的最大難題軟體工程
- POJ - 3041 Asteroids 【二分圖匹配】AST
- 模板匹配
- 匈牙利演算法模板(二分圖)演算法
- 二分查詢基礎專題——二分模板
- POJ 3041-Asteroids(二分圖匹配)AST
- 239. 滑動視窗最大值
- poj2400 KM演算法二分圖的完美匹配演算法
- 詳解匈牙利演算法與二分圖匹配演算法
- 求二部圖最大匹配的匈牙利演算法演算法
- 二分圖(例題)
- hdu2255 二分圖的最佳匹配 KM演算法演算法
- 模板匹配(matlab)Matlab
- leetcode解題模板 —— 二分查詢LeetCode
- POJ 1325-Machine Schedule(二分圖匹配-匈牙利演算法)Mac演算法
- XLD建立形狀匹配的模板
- LeetCode 239. 滑動視窗最大值LeetCode
- leetcode410分割陣列的最大值(二分+貪心,困難)LeetCode陣列
- Solution - Luogu P10918 小分圖最大匹配
- Uva11383 二分圖的完美匹配(深入理解KM演算法)演算法