Pagini recente » Cod sursa (job #1170486) | Cod sursa (job #1360749) | Cod sursa (job #2834984) | Cod sursa (job #2785802) | Cod sursa (job #603592)
Cod sursa(job #603592)
#include<cstdio>
#include<vector>
using namespace std;
vector<int> V[200010];
int n,m,e,a,b,ok,viz[200010],cuplat[200010],sol,DFS(int),i;
void read(),solve();
int main()
{
read();
solve();
return 0;
}
void read()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d%d%d",&n,&m,&e);
for(;e;--e)
{
scanf("%d%d",&a,&b);
b+=100000;
V[a].push_back(b);
V[b].push_back(a);
}
}
void solve()
{
while(!ok)
{
ok=1;
memset(viz,0,sizeof(viz));
for(i=1;i<=n;i++)
if(!cuplat[i])
if(DFS(i)){ok=0;++sol;}
}
printf("%d\n",sol);
for(i=1;i<=n;i++)if(cuplat[i])printf("%d %d\n",i,cuplat[i]-100000);
}
int DFS(int X)
{
if(viz[X])return 0;
viz[X]=1;
for(vector<int>::iterator it=V[X].begin();it!=V[X].end();it++)
if(!cuplat[*it])
{
cuplat[X]=*it;
cuplat[*it]=X;
return 1;
}
for(vector<int>::iterator it=V[X].begin();it!=V[X].end();it++)
if(DFS(cuplat[*it]))
{
cuplat[X]=*it;
cuplat[*it]=X;
return 1;
}
return 0;
}