Pagini recente » Cod sursa (job #261646) | Cod sursa (job #418738) | Statistici mircea maria ioana (mirceamaria2007) | Statistici SeFu SeFiLoR (BoSs_De_BosS) | Cod sursa (job #115417)
Cod sursa(job #115417)
#include<fstream.h>
#define dim 751
unsigned long min=4294967294;
int nv[dim];
int n,m,k;
struct graf
{struct vecini
{int vec,ok;
unsigned long c,d;
vecini *urm;
};
vecini *v,*sf;
};
graf l[dim];
int cel[16];
struct nod
{int nr,nrd;
unsigned long det;
unsigned long s;
nod *adu;
};
nod *p,*u;
void parc(int x,int nr2,unsigned long ch,unsigned long sum)
{unsigned long mask,comp;
nod *man;
vecini *inc;
inc=l[x].v;
while(l[x].v)
{if(l[x].v->ok)
{if((nr2+1)<=l[x].v->d)
{mask=1;mask=mask<<l[x].v->ok;
comp=mask&ch;
if(!comp)
{if((nr2+1)==k)
{sum+=(nr2+1)*l[x].v->c;
if(sum<min) min=sum;
}
else
{man=new nod;
u->adu=man;
man->nr=l[x].v->vec;
man->nrd=nr2+1;
man->det=ch|mask;
man->s=sum+(nr2+1)*l[x].v->c;man->adu=0;
u=man;
}
}
}
}
else
{if((nr2+1)<=l[x].v->d)
{
man=new nod;u->adu=man;man->nr=l[x].v->vec;man->nrd=nr2;man->det=ch;
man->s=sum+(nr2+1)*l[x].v->c;man->adu=0;
u=man;
}
}
l[x].v=l[x].v->urm;
}
l[x].v=inc;
}
void lee()
{nod *man;
int t,nr2;
unsigned long sum,ch;
while(p)
{t=p->nr;ch=p->det;sum=p->s;nr2=p->nrd;
parc(t,nr2,ch,sum);
man=p;p=p->adu;delete man;
}
}
int main()
{ifstream f("gather.in");
ofstream g("gather.out");
vecini *man;
f>>k>>n>>m;
int i,j,x,y,z,t,ok2;
for(i=1;i<=k;i++) f>>cel[i];
for(i=1;i<=m;i++)
{f>>x>>y>>z>>t;
if(!nv[x])
{nv[x]++;
l[x].v=new vecini;l[x].v->urm=0;l[x].v->c=z;l[x].v->d=t;l[x].v->vec=y;
ok2=0;for(j=1;j<=k;j++) if(y==cel[j]) {ok2=j;break;}
l[x].v->ok=ok2;
l[x].sf=l[x].v;
}
else
{nv[x]++;man=new vecini;l[x].sf->urm=man;man->urm=0;
man->vec=y;man->c=z;man->d=t;
ok2=0;for(j=1;j<=k;j++) if(y==cel[j]) {ok2=j;break;}
man->ok=ok2;
l[x].sf=man;
}
if(!nv[y])
{nv[y]++;
l[y].v=new vecini;l[y].v->urm=0;l[y].v->c=z;l[y].v->d=t;l[y].v->vec=x;
ok2=0;for(j=1;j<=k;j++) if(x==cel[j]) {ok2=j;break;}
l[y].v->ok=ok2;
l[y].sf=l[y].v;
}
else
{nv[y]++;man=new vecini;l[y].sf->urm=man;man->urm=0;
man->vec=x;man->c=z;man->d=t;
ok2=0;for(j=1;j<=k;j++) if(x==cel[j]) {ok2=j;break;}
man->ok=ok2;
l[y].sf=man;
}
}
f.close();
p=new nod;p->nr=1;p->det=0;p->s=0;p->nrd=0;p->adu=0;u=p;
lee();
g<<min<<'\n';
g.close();
return 0;
}