Cod sursa(job #1300965)

Utilizator RaduGabriel2012Dinu Radu RaduGabriel2012 Data 25 decembrie 2014 12:34:50
Problema Ubuntzei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#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;
}