hdu2845二分图 Hopcroft-Karp Algorithm
来源:互联网 发布:苹果mac壁纸百度网盘 编辑:程序博客网 时间:2024/06/05 19:08
思路:模板题就不多说了;
/*****************************************Author :Crazy_AC(JamesQi)Time :2015File Name :*****************************************/// #pragma comment(linker, "/STACK:1024000000,1024000000")#include <iostream>#include <algorithm>#include <iomanip>#include <sstream>#include <string>#include <stack>#include <queue>#include <deque>#include <vector>#include <map>#include <set>#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <limits.h>using namespace std;#define MEM(a,b) memset(a,b,sizeof a)#define pk push_backtemplate<class T> inline T Get_Max(const T&a,const T&b){return a < b?b:a;}template<class T> inline T Get_Min(const T&a,const T&b){return a < b?a:b;}typedef long long ll;typedef pair<int,int> ii;const int inf = 1 << 30;const int INF = 0x3f3f3f3f;const int MOD = 1e9 + 7;const int maxn = 5010;int uN,vN;int Mx[maxn],My[maxn];int dx[maxn],dy[maxn];bool vst[maxn];int dis;vector<int> G[maxn];bool Search_P(){queue<int> que;dis = INF;MEM(dx, -1);MEM(dy, -1);for (int i = 1;i <= uN;i++){if (Mx[i] == -1){que.push(i);dx[i] = 0;}}while(!que.empty()){int u = que.front();que.pop();if (dx[u] > dis) break;for (int i = 0;i < G[u].size();i++){int v = G[u][i];if (dy[v] == -1){dy[v] = dx[u] + 1;if (My[v] == -1){dis = dy[v];}else{dx[My[v]] = dy[v] + 1;que.push(My[v]);}}}}return dis != INF;}bool dfs(int u){for (int i = 0;i < G[u].size();i++){int v = G[u][i];if (!vst[v] && dy[v] == dx[u] + 1){vst[v] = 1;if (My[v] != -1 && dy[v] == dis) continue;if (My[v] == -1 || dfs(My[v])){Mx[u] = v;My[v] = u;return true;}}}return false;}inline int Hopcroft_Karp(){int ret = 0;MEM(Mx, -1);MEM(My, -1);while(Search_P()){MEM(vst, false);for (int i = 1;i <= uN;i++){if (Mx[i] == -1 && dfs(i))ret++;}}return ret;}int main(){// ios::sync_with_stdio(false);// freopen("in.txt","r",stdin);// freopen("out.txt","w",stdout);int T,n;// cin >> T;scanf("%d",&T);while(T--){// cin >> n;scanf("%d",&n);for (int i = 1;i <= n;i++)G[i].clear();for (int i = 0;i < n * 3 / 2;i++){int x,y;// cin >> x >> y;scanf("%d%d",&x,&y);G[x].push_back(y);G[y].push_back(x);}uN = vN = n;cout << Hopcroft_Karp() / 2 << endl;}return 0;}
下面就是神AC了,,,苍天,请收下我的膝盖吧!!!
#include<stdio.h>int main(){ int t,n,i,x,y; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=0;i<n*3/2;i++) scanf("%d%d",&x,&y); printf("%d\n",n/2); } return 0;}
0 0
- hdu2845二分图 Hopcroft-Karp Algorithm
- 二分图匹配-Hopcroft-Karp
- 【二分图匹配】Hopcroft-Karp算法模板
- 二分匹配Hopcroft-Karp算法
- 二分图最大匹配之Hopcroft-Karp算法
- Hopcroft-Karp算法 二分图最小路径覆盖
- POJ 1469二分图匹配Hopcroft-Karp算法
- 学习Hopcroft-Karp二分图最大匹配算法
- hdu 2389 Rain on your Parade (二分图,Hopcroft-Karp)
- Hopcroft-Karp 二分图HDU2389 Rain on your Parade
- 二分图最大匹配算法-Hopcroft-Karp模板
- hdu 1150 二分图的最大匹配 hopcroft-karp算法
- hdu2389+二分匹配(Hopcroft-Karp算法)
- 利用匈牙利算法&Hopcroft-Karp算法解决二分图中的最大二分匹配问题
- 【Hopcroft-Karp && 二分图的最大匹配数 && 有向图】HDU
- 二分图最大匹配hopcroft-karp算法——HDU 2389
- hdu 2389 Rain on your Parade(二分图最大匹配,Hopcroft-Karp)
- HDU2389-Rain on your Parade(二分图匹配Hopcroft-Karp算法)
- 欢迎使用CSDN-markdown编辑器
- Android SDK Manager的更新服务更新SDK组件
- 在物理 Data Guard 中对异构主备系统的支持
- Windows Server 2012 R2在桌面上显示计算机/网络图标
- 【Python】切割字符串
- hdu2845二分图 Hopcroft-Karp Algorithm
- 关于websocket断开连接的一些猜想
- 关于逻辑回归(Logistic regression)模型的简单思考
- HDU 5445 Food Problem (2015年长春赛区网络赛I题)
- 你不知道的指针―被欺骗的编译器
- Apache Shiro 使用手册(二)Shiro 认证
- django获取url参数总结
- PS AD命令之 enable-adaccount!
- HDOJ 2094 产生冠军(map容器)