Pagini recente » Cod sursa (job #1167825) | Cod sursa (job #3126991) | Cod sursa (job #1933761) | Cod sursa (job #2497343) | Cod sursa (job #1300965)
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <vector>
using namespace std;
ifstream f("fotbal2.in");
ofstream g("fotbal2.out");
vector <int> v[50005],mt[50005];
int n,m,a[250005],k,gr[50005],kres,win[250005],use[50005];
void Del(int x,int y)
{ int i;
for(i=0;i<v[x].size();i++)
if (v[x][i]==y)
{v[x][i]=v[x][v[x].size()-1];
mt[x][i]=mt[x][mt[x].size()-1];
mt[x].pop_back();
v[x].pop_back();
break;
}
}
void Euler(int x)
{ int nod;
while(v[x].size())
{
nod=v[x][0];
if (x!=n+1 && v[x][0]!=n+1) win[mt[x][0]]=x;
k++; a[k]=nod; use[nod]=1;
Del(x,nod);
Del(nod,x);
x=nod;
}
}
int main()
{ int i,x,y,j,ok=1;
f>>n>>m;
for(i=1;i<=m;i++)
{ f>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
mt[x].push_back(i);
mt[y].push_back(i);
gr[x]++; gr[y]++;
}
for(i=1;i<=n;i++)
if (gr[i]%2==1)
{v[i].push_back(n+1);
mt[i].push_back(0);
v[n+1].push_back(i);
mt[n+1].push_back(0);
ok=0;
}
for(i=1;i<=n;i++)
if (!use[i]) Euler(i);
if (ok) g<<"0\n"; else g<<"2\n";
for(i=1;i<=m;i++)
g<<win[i]<<"\n";
return 0;
}