Pagini recente » Cod sursa (job #1289638) | Cod sursa (job #1477890) | Cod sursa (job #2297640) | Cod sursa (job #1761610) | Cod sursa (job #115130)
Cod sursa(job #115130)
#include<stdio.h>
int n,m,a[751][751],b[751][751],i,k,j,x,y,d[751],viz[751][751];
unsigned int min;
void df(int vf,int nr,int m);
int main()
{freopen("gather.in","r",stdin);
freopen("gather.out","w",stdout);
scanf("%d %d %d",&k,&n,&m);
for(i=1;i<=k;i++){scanf("%d",&x);d[x]=1;}
for(i=1;i<=m;i++)
{scanf("%d %d",&x,&y);
scanf("%d %d",&a[x][y],&b[x][y]);
a[y][x]=a[x][y];b[y][x]=b[x][y];}
min=3000000000;
df(1,1,0);
printf("%u",min);
fclose(stdout);
return 0;
}
void df(int vf,int nr,int m)
{if(m>min) return;
if(nr==k&&d[vf]) {min=m;return;}
for(int i=1;i<=n;i++)
if(viz[vf][i]<2&&nr<=b[vf][i])
{viz[vf][i]++;
if(nr<b[vf][i]&&d[vf]) {d[vf]--;df(i,nr+1,m+a[vf][i]*(nr+1));d[vf]++;}
df(i,nr,m+a[vf][i]*nr);
viz[vf][i]--;}
}