Pagini recente » Cod sursa (job #387890) | Istoria paginii utilizator/madiii | Cod sursa (job #2054553) | Monitorul de evaluare | Cod sursa (job #989847)
Cod sursa(job #989847)
#include <fstream>
#include <iostream>
using namespace std;
#include <vector>
#define LE 66666
int n,n2,m;
vector<int> H[LE];
#define sh short int
bool viz[LE];
bool cpl[LE];
sh i,j,cuplaj[LE];
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
#define pb push_back
bool dfs(sh nod){
sh N=H[nod].size(),i;
viz[nod]=true;
for(i=0;i<N;++i)
if (viz[H[nod][i]]==false){
if (cpl[H[nod][i]]==false) {
cpl[nod]=cpl[H[nod][i]]=true;
cuplaj[nod]=H[nod][i];
cuplaj[H[nod][i]]=nod;
viz[H[nod][i]]=true;
return true;
}
viz[H[nod][i]]=true;
if ( dfs(cuplaj[H[nod][i]]) ){
cpl[nod]=cpl[H[nod][i]]=true;
cuplaj[nod]=H[nod][i];
cuplaj[H[nod][i]]=nod;
return true;
}
}
return false;
}
sh result;
int main(){
f>>n>>n2>>m;
for(i=1;i<=m;++i){
int xx,yy;
f>>xx>>yy;
H[xx].pb(yy+n);
H[yy+n].pb(xx);
}
for(i=1;i<=n;++i){
if (cpl[i]==false){
for(j=1;j<=n+n2;++j) viz[j]=false;
for(j=i;j<=n;++j)
if(viz[j]==false&&cpl[j]==false)
if (dfs(j)) ++result;
}
}
g<<result<<'\n';
for(i=1;i<=n;++i) if (cpl[i]==true)
g<<i<<" "<<cuplaj[i]-n<<'\n';
return 0;
}