Cod sursa(job #3373819)

Utilizator ThoughtfulScholarCalin Andrei Razvan ThoughtfulScholar Data 7 noiembrie 2026 22:34:48
Problema Sate Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.15 kb
#include <stdio.h>
#include <vector>
using namespace std;

#define Nmax 10001
#define Mmax 30001

int N,M,i;
int x[Mmax],y[Mmax];
int was[Nmax],grad[Nmax];
vector<int> G[Nmax];

int citire()
{
 freopen("drumuri.in","r",stdin);
 scanf("%d %d",&N,&M);
 if (M & 1) return 0;
 for (i=1;i<=M;++i)
     {
      scanf("%d %d",&x[i],&y[i]);
      G[x[i]].push_back(i);
      G[y[i]].push_back(i);
      ++grad[x[i]];
      ++grad[y[i]];
     }
 return 1;
}

void dfs(int nod,int stra)
{
 vector<int>::iterator it;
 int nr=1;
 was[nod]=1;
//parcurgere
 for (it=G[nod].begin();it<G[nod].end();++it)
     if ( (x[*it]!=nod) && (!was[x[*it]] ) )
         dfs(x[*it],nod);
       else
     if ( (y[*it]!=nod) && (!was[y[*it]] ) )
         dfs(y[*it],nod);
 if ((grad[nod] & 1) == 0)
    for (it=G[nod].begin();it<G[nod].end();++it)
        if (x[*it]==nod)
           {
            if ((nr^=1)==0) printf("%d %d",y[*it],x[*it]);
              else printf(" %d\n",y[*it]);
            --grad[x[*it]];
            --grad[y[*it]];
            x[*it]=y[*it]=0;
           }
         else if (y[*it]==nod)
          {
           if ((nr^=1)==0) printf("%d %d",x[*it],y[*it]);
              else printf(" %d\n",x[*it]);
           --grad[x[*it]];
           --grad[y[*it]];
           x[*it]=y[*it]=0;
          }
          else ;
  else
    for (it=G[nod].begin();it<G[nod].end();++it)
        if ((x[*it]==nod) && (y[*it]!=stra))
           {
            if ((nr^=1)==0) printf("%d %d",y[*it],x[*it]);
              else printf(" %d\n",y[*it]);
            --grad[x[*it]];
            --grad[y[*it]];
            x[*it]=y[*it]=0;
           }
         else if ((y[*it]==nod) && (x[*it]!=stra))
          {
           if ((nr^=1)==0) printf("%d %d",x[*it],y[*it]);
              else printf(" %d\n",x[*it]);
           --grad[x[*it]];
           --grad[y[*it]];
           x[*it]=y[*it]=0;
          }
}

int main()
{
 freopen("drumuri.out","w",stdout);
 was[0]=1;
 if (citire()) {
                 printf("%d\n",1);
                 dfs(1,0);
               }
    else printf("%d",0);
 fclose(stdout);
 fclose(stdin);
 return 0;
}