| ||||||||||
Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
贴个c++代码#include <iostream> using namespace std; int G[1005][505];//邻接表 int deg[1005];//每个节点的度 int match[1005];//与节点配对的节点 bool used[505];//记录节点是否已被搜索过 bool dfs(int v);//利用二分图的性质优化dfs int main() { int N, K, R, C, ans = 0; cin >> N >> K; for (int i = 0; i < K; i++) { cin >> R >> C; G[R][deg[R]++] = N + C; G[N + C][deg[N + C]++] = R; } for (int i = 1; i <= N; i++) { for (int i = 1; i <= N; i++) { used[i] = false; } if (dfs(i)) { ans++; } } cout << ans << '\n'; return 0; } bool dfs(int v) { int u, w;//用于临时记录 used[v] = true; for (int i = 0; i < deg[v]; i++) { u = G[v][i]; w = match[u]; if (!w) { match[v] = u; match[u] = v; return true; } else if (!used[w]) { if (dfs(w)) { match[v] = u; match[u] = v; return true; } } } return false; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator