Pagini recente » Cod sursa (job #504883) | Cod sursa (job #3252766) | Cod sursa (job #180776) | Cod sursa (job #2351832) | Cod sursa (job #2763668)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int n,m,e,t,OK,OK2,perechi[20005],stiva[100005],viz[20005];
vector <int> graf[20005];
void dfs(int start)
{
int i;
viz[start]=1;
stiva[++t]=start;
if(perechi[start]==0 && t>1)
{
OK=1;
OK2=1;
for(i=1;i<t;i+=2)
{
perechi[perechi[stiva[i]]]=0;
perechi[stiva[i]]=stiva[i+1];
perechi[perechi[stiva[i+1]]]=0;
perechi[stiva[i+1]]=stiva[i];
}
}
if(OK2==0)
for(i=0;i<graf[start].size();i++)
if(viz[graf[start][i]]==0)
dfs(graf[start][i]);
t--;
viz[start]=0;
}
void cuplaj()
{
int i;
OK=1;
while(OK)
{
OK=0;
for(i=1;i<=n;i++)
if(perechi[i]==0)
{
OK2=0;
dfs(i);
}
}
int nr=0;
for(i=1;i<=n;i++)
if(perechi[i]>0)
nr++;
g<<nr<<'\n';
for(i=1;i<=n;i++)
if(perechi[i]>0)
g<<i<<' '<<perechi[i]-n<<'\n';
}
int main()
{
int a,b,i;
f>>n>>m>>e;
for(i=1;i<=e;i++)
{
f>>a>>b;
b+=n;
graf[a].push_back(b);
graf[b].push_back(a);
}
cuplaj();
return 0;
}