Cod sursa(job #1470465)

Utilizator BorleaAndreiBorlea Andrei Daniel BorleaAndrei Data 11 august 2015 14:00:30
Problema Pioni Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.72 kb
using namespace std;
#include<iostream>
#include<cstdio>

FILE *f, *g;
struct graf
{
    int nod;

    graf *urm;
};
int n,t,m,c,date[2][20001],solutie[40002];
graf *l[20001];

void adanc(int nod,int nivel)
{graf *p;
   // cout<<nod<<" ";

    p=new graf;
    p=l[nod];
    while(p!=0)
    {
if((l[p->nod]==0)&&c==0) c=nivel+1;
            else if((l[p->nod]==0)&&c>nivel+1) c=nivel+1;
                adanc(p->nod,nivel+1);
        p=p->urm;
    }
}

int main()
{
    int i=0,j=0,k=0,h=0,y=1;
    graf *p;
   // clock_t tStart = clock();
    f=fopen("pioni.in.txt","r");
    g=fopen("pioni.out.txt","w");
    fscanf(f,"%d %d %d",&t,&n,&m);
    for(i=1;i<=n;i++) l[i]=NULL;
    for(k=0;k<m;k++)
    {
        fscanf(f,"%d %d",&i,&j);
        p=new graf;
        p->urm=l[i];
        p->nod=j;
        l[i]=p;
    }
k=0;m=t;
while(t>0)
{
    for(i=1;i<=n;i++)
{//cout<<"\n";
    c=0;
    adanc(i,0);
    date[0][i]=c;

}

    fscanf(f,"%d",&c);
while(c>0)
{
    fscanf(f,"%d",&i);date[1][i]++;c--;
}
k=0;
for(i=1;i<=n;i++) {if(date[1][i]==0) date[0][i]=0;
else if(date[0][i]>c) {c=date[0][i];h=i;}

}

h=1;c=0;m=0;
while(h==1)
{h=0;

if(c==0) c=1;
else c=0;

if(m!=0)
{
    for(i=1;i<=n;i++) if(date[0][i]%2!=0) {date[0][i]--;h=1;}
if(h==0)
{k==0;
    for(i=1;i<=n;i++) if(date[0][i]%2==0&&h==0&&date[0][i]>0) h=i;
else if(date[0][i]%2==0&&h!=0&&date[0][i]>0) {date[0][i]--;k=1;}
if(k==0) date[0][h]--;
}
h=0;
}
else
{

   for(i=1;i<=n;i++) if(date[0][i]%2!=0)
    {date[0][i]--;h=1;
    p=new graf; p=l[i];
    while(p)
    {
        c=0;
        adanc(p->nod,0);if(c==date[0][i]) {
            while(date[1][i]>0){solutie[0]++;solutie[y]=i;solutie[y+1]=p->nod;y=y+2;date[1][i]--;}break;}
        p=p->urm;
    }
   }
   if(h==0)
   {
       k==0;
    for(i=1;i<=n;i++) if(date[0][i]%2==0&&h==0&&date[0][i]>0) h=i;
else if(date[0][i]%2==0&&h!=0&&date[0][i]>0) {date[0][i]--;k=1;
p=new graf; p=l[i];
    while(p)
    {
        c=0;
        adanc(p->nod,0);if(c==date[0][i]) {while(date[1][i]>0) {solutie[0]++;solutie[y]=i;solutie[y+1]=p->nod;y=y+2;
        date[1][i]--;}
        break;}
        p=p->urm;
    }


}
if(k==0) {date[0][h]--;

p=new graf; p=l[h];
    while(p)
    {
        c=0;
        adanc(p->nod,0);if(c==date[0][i]) {while(date[1][i]>0) {solutie[0]++;solutie[y]=i;solutie[y+1]=p->nod;y=y+2;
        date[1][i]--;}
        break;}
        p=p->urm;
    }
}

   }

c=1;m=1;h=0;
}

for(i=1;i<=n;i++) if(date[0][i]>0) {h=1;break;}


}
if(c==0) fprintf(g,"Fumeanu \n");
else {fprintf(g,"Nargy \n");
    for(i=0;i<y;i++) fprintf(g,"%d ",solutie[i]);fprintf(g,"\n");
        }

for(i=1;i<=n;i++) date[0][i]=date[1][i]=0;t--;
}
}