Cod sursa(job #1630118)
Utilizator | Data | 4 martie 2016 22:27:39 | |
---|---|---|---|
Problema | Cuplaj maxim in graf bipartit | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.54 kb |
#include <bits/stdc++.h>
#define N 10000
using namespace std;
string h="cuplaj.";
fstream f(h+"in"),g(h+"out");
int n,m,k,i,C,R[N],L[N],x,y,T[N],O=-1;
vector<int> v[N];
int P(int n)
{
if (T[n]==i)return 0;
T[n]=i;
for (auto j:v[n])
if (!L[j]||P(L[j])){
L[j]=n,R[n]=j;
return 1;
}
return 0;
}
int main()
{
f>>n>>m>>k;
for (i=1;i<=k;++i)
f>>x>>y,v[x].push_back(y);
while(O!=C)
for(i=1,O=C;i<=n;++i)
if (!R[i])C+=P(i);
g<<C<<'\n';
for (i=1;i<=n;++i)
if (R[i])g<<i<<" "<<R[i]<<'\n';
return 0;
}