Pagini recente » Cod sursa (job #1381397) | Cod sursa (job #265424) | Cod sursa (job #1946319) | Cod sursa (job #1834747) | Cod sursa (job #895869)
Cod sursa(job #895869)
#include <cstdio>
#include <iostream>
#include <vector>
#define GLen 10001
using namespace std;
vector < int > g[GLen];
int L[GLen], R[GLen], use[GLen];
inline int cuplaj(int nod)
{
if(use[nod]) return 0;
use[nod] = 1;
for(int i = 0; i < g[nod].size(); ++ i)
if(R[ g[nod][i] ] == 0)
{
L[nod] = g[nod][i];
R[ g[nod][i] ] = nod;
return 1;
}
for(int i = 0; i < g[nod].size(); ++ i)
if(R[ g[nod][i] ] != 0)
if(cuplaj(R[ g[nod][i] ]))
{
L[nod] = g[nod][i];
R[ g[nod][i] ] = nod;
return 1;
}
return 0;
}
int main()
{
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
int N, M, E;
cin >> N >> M >> E;
for(int i = 1; i <= E; ++ i)
{
int x, y;
cin >> x >> y;
g[x].push_back(y);
g[y].push_back(x);
}
int change = 1;
while(change)
{
change = 0;
for(int i = 1; i <= N; ++ i) use[i] = 0;
for(int i = 1; i <= N; ++ i)
change |= cuplaj(i);
}
int sol = 0;
for(int i = 1; i <= N; ++ i)
if(L[i] != 0) ++ sol;
cout << sol << '\n';
for(int i = 1; i <= N; ++ i)
if(L[i])
cout << L[i] << ' ' << R[i] << '\n';
return 0;
}