标签:vector style using main output problem src pre close
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 8418 Accepted Submission(s): 3709
先判断能不能分成二分图 , 不是就输出No。。只有1个的时候也不是
然后求完美匹配即可。。。我不会写匈牙利了。。。。只会写hk。。。还是套模板。。。
因为没有分左右 所以要除2
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath> #include <queue> #include <vector> #define mem(a, b) memset(a, b, sizeof(a)) using namespace std; const int maxn = 10010, INF = 0x7fffffff; int dx[maxn], dy[maxn], cx[maxn], cy[maxn], used[maxn], vis[maxn]; int nx, ny, dis; vector<int> G[40005]; int n, m; int bfs() { queue<int> Q; dis = INF; mem(dx, -1); mem(dy, -1); for(int i=1; i<=nx; i++) { if(cx[i] == -1) { Q.push(i); dx[i] = 0; } } while(!Q.empty()) { int u = Q.front(); Q.pop(); if(dx[u] > dis) break; for(int v=0; v<G[u].size(); v++) { int i = G[u][v]; if(dy[i] == -1) { dy[i] = dx[u] + 1; if(cy[i] == -1) dis = cy[i]; else { dx[cy[i]] = dy[i] + 1; Q.push(cy[i]); } } } } return dis != INF; } int dfs(int u) { for(int v=0; v<G[u].size(); v++) { int i=G[u][v]; if(!used[i] && dy[i] == dx[u] + 1) { used[i] = 1; if(cy[i] != -1 && dis == dy[i]) continue; if(cy[i] == -1 || dfs(cy[i])) { cy[i] = u; cx[u] = i; return 1; } } } return 0; } int hk() { int res = 0; mem(cx, -1); mem(cy, -1); while(bfs()) { mem(used, 0); for(int i=1; i<=nx; i++) if(cx[i] == -1 && dfs(i)) res++; } return res; } int istwo(int u) { queue<int> E; mem(vis, -1); E.push(u); vis[u] = 1; while(!E.empty()) { u = E.front(); E.pop(); for(int i=0; i<G[u].size(); i++) { int v = G[u][i]; if(vis[v] == -1) { if(vis[u] == 1) vis[v] = 0; else vis[v] = 1; E.push(v); } else if(vis[v] == vis[u]) return 0; } } return 1; } int main() { while(cin>> n >> m && n+m) { for(int i=0; i<maxn; i++) G[i].clear(); for(int i=0; i<m; i++) { int u, v; cin>> u >> v; G[u].push_back(v); G[v].push_back(u); } if(!istwo(1) || n == 1) { cout<< "No" <<endl; continue; } nx = n; ny = n; cout<< hk()/2 <<endl; } return 0; }
The Accomodation of Students HDU - 2444(判断二分图 + 二分匹配)
标签:vector style using main output problem src pre close
原文地址:https://www.cnblogs.com/WTSRUVF/p/9309629.html