Pagini recente » Cod sursa (job #1188713) | Cod sursa (job #2863909) | Cod sursa (job #337760) | Cod sursa (job #1586330) | Cod sursa (job #677390)
Cod sursa(job #677390)
#include<cstdio>
#define DN 2005
#define CIC 99999999
int n, m, d[DN], ck[DN], k, mink=CIC, maxk=0; bool viz[DN];
FILE *f=fopen("ubuntzei.in", "r");
FILE *g=fopen("ubuntzei.out", "w");
struct graf
{
int nod1, nod2, c;
graf *urm;
}*a[DN];
void NO_TO_ACTA()
{
fscanf(f, "%d%d", &n, &m);
fscanf(f, "%d", &k);
for(int i=1; i<=k; ++i)
fscanf(f, "%d", &ck[i]);
for(int i=2; i<=n; ++i)
d[i]=CIC;
for(int i=1; i<=m; ++i)
{
int x, y, c;
fscanf(f, "%d%d%d", &x, &y, &c);
graf *q = new graf;
q->nod1=x;
q->nod2=y;
q->c=c;
q->urm=a[1];
a[1]=q;
if(x==1)
d[y]=c;
}
}
int main()
{
NO_TO_ACTA();
bool ok=1, ok2=1; int cont;
while(ok)
{
graf *q;
q=a[1]; ok=0; cont=0;
while(q!=NULL)
{
if(ok==1)
{
if(mink>d[q->nod1]+q->c)
{
d[q->nod2]=d[q->nod1]+q->c;
ok=1;
cont=cont+q->c;
viz[q->nod1]=1;
}
}
else
{
if(d[q->nod1]+q->c>maxk)
{
d[q->nod2]=d[q->nod1]+q->c;
ok=1;
cont=cont+q->c;
viz[q->nod1]=1;
}
}
q=q->urm;
}
if(cont<mink)
mink=cont;
ok2=1;
for(int i=1; i<=k; ++i)
{
if(viz[ck[i]]==1)
viz[ck[i]]=0;
else
{
ok2=0;
viz[ck[i]]=0;
}
}
if(ok2==0)
{
maxk=mink;
mink=CIC;
}
}
if(d[n]!=CIC)
fprintf(g, "%d ", d[n]);
else
fprintf(g, "0 ");
}