Pagini recente » Cod sursa (job #2764881) | Cod sursa (job #2949958) | Cod sursa (job #2318320) | Cod sursa (job #1439933) | Cod sursa (job #2697147)
#include <bits/stdc++.h>
using namespace std;
int n,m,q,i,ok,nr,ap[100005],st[100005],dr[100005];
vector <int> v[100005];
bool pot(int x){
if(ap[x]) return 0;
int y=0;
ap[x]=1;
for(int k=1; k<=v[x][0]; k++){
y=v[x][k];
if(st[y]==0){
dr[x]=y;
st[y]=x;
return 1;
}
}
for(int k=1; k<=v[x][0]; k++){
y=v[x][k];
if(pot(st[y])){
dr[x]=y;
st[y]=x;
return 1;
}
}
return 0;
}
int main(){
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
f>>n>>m>>q;
for(i=1; i<=n; i++)
v[i].push_back(0);
for(i=1; i<=q; i++){
int x,y;
f>>x>>y;
v[x][0]++;
v[x].push_back(y);
}
ok=1;
while(ok){
ok=0;
for(i=1; i<=n; i++)
ap[i]=0;
for(i=1; i<=n; i++)
if(dr[i]==0&&pot(i)==1){
ok=1;
nr++;
}
}
g<<nr<<endl;
for(i=1; i<=n; i++){
if(dr[i]) g<<i<<" "<<dr[i]<<endl;
}
return 0;
}