Pagini recente » Cod sursa (job #2362242) | Cod sursa (job #57200) | Cod sursa (job #2812183) | Cod sursa (job #1608916) | Cod sursa (job #1470497)
using namespace std;
#include<iostream>
#include<cstdio>
#define MAX 20001
#define DMAX 40002
FILE *f, *g;
struct graf
{
short nod;
graf *urm;
};
short n,t,m,c,date[2][MAX],solutie[DMAX];
graf *l[MAX];
void adanc(short nod,short 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()
{
short i=0,j=0,k=0,h=0,y=1;
graf *p;
// clock_t tStart = clock();
f=fopen("pioni.in","r");
g=fopen("pioni.out","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--;
}
}