| ||||||||||
| 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