51NOD 2006 飞行员配对(二分图最大匹配)
2017-07-12 21:17
239 查看
题目链接:
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=2006题解:
一道很基础的二分匹配题目,自己又重新回顾了一下匈牙利算法。代码:
#include <cstdio> #include <cmath> #include <vector> #include <cstring> #include <algorithm> using namespace std; #define met(a,b) memset(a,b,sizeof(a)) #define inf 0x3f3f3f3f const int maxn = 100+10; vector<int> p[maxn]; int match[maxn]; bool visited[maxn]; int n,m; bool dfs(int u) { for(int i=0;i<p[u].size();i++) { int v=p[u][i]; if(!visited[v]) { visited[v]=true; if(match[v]==-1||dfs(match[v])) // 如果该点是未匹配点或则走过点之后还可以进行匹配 { match[v]=u; match[u]=v; return true; } } } return false; } int main() { scanf("%d%d",&m,&n); while(1) { int a,b; scanf("%d%d",&a,&b); if(a==-1&&b==-1) break; p[a].push_back(b); p[b].push_back(a); } int ans=0; met(match,-1); for(int i=1;i<=m;i++) // 这里只需要查找一遍的点就行了。 { met(visited,false); // 每次搜索前,都要将所有的点进行初始化 visited[i]=true; if(dfs(i)) ans++; } if(ans==0) printf("No Solution!\n"); else printf("%d\n",ans); }
相关文章推荐
- 51Nod-2006 飞行员配对(二分图最大匹配,匈牙利算法)
- 51Nod 2006 飞行员配对(二分图最大匹配) 匈牙利算法
- 51Nod-2006-飞行员配对(二分图最大匹配)
- 51nod2006 飞行员配对(二分图最大匹配)匈牙利算法
- 51nod_2006_飞行员配对(二分图最大匹配)
- 51nod 2006 飞行员配对(二分图最大匹配) 裸匈牙利算法 求二分图最大匹配题
- 51Nod-2006-飞行员配对(二分图最大匹配)
- 51nod 2006 飞行员配对(二分图最大匹配)
- 51Nod 2006:飞行员配对(二分图最大匹配,匈牙利算法)
- 51nod 2006 飞行员配对(二分图最大匹配)
- 51NOD-2006 飞行员配对(二分图最大匹配)
- 2006 飞行员配对(二分图最大匹配)
- 2006 飞行员配对(二分图最大匹配)
- 51nod 基础题 飞行员配对(二分图最大匹配)
- 51-Nod 2006 飞行员配对(二分图最大匹配)
- 51Nod 飞行员配对(二分图最大匹配)(匈牙利算法模板题)
- 51nod 2006 飞行员配对(二分图最大匹配)
- 一、飞行员配对方案问题 [二分图的最大匹配]
- Luogu 2756 飞行员配对方案问题(二分图最大匹配)
- 51Nod 2006 飞行员配对(二分图最大匹配)-匈牙利算法