Pagini recente » Cod sursa (job #181231) | fmi-no-stress-9-warmup | Cod sursa (job #547946) | Cod sursa (job #696850) | Cod sursa (job #133579)
Cod sursa(job #133579)
#include<stdio.h>
#include<stdlib.h>
#define Max 30000
FILE*f=fopen("sate.in","r");
FILE*g=fopen("sate.out","w");
typedef struct NOD
{
int info, cost;
NOD *urm;
}Nod;
Nod *prim[Max], *ultim[Max];
int n,m,X,Y,viz[Max];
void insert(int x, int y, int cost)
{
Nod *p,*q;
p=new Nod;
p->info=y;
p->cost=cost;
p->urm=NULL;
if(prim[x]==NULL) prim[x]=ultim[x]=p;
else
{
ultim[x]->urm=p;
ultim[x]=p;
}
q=new Nod;
q->info=x;
q->cost=cost;
q->urm=NULL;
if(prim[y]==NULL) prim[y]=ultim[y]=q;
else
{
ultim[y]->urm=q;
ultim[y]=q;
}
}
void debug()
{
int i;
Nod *q;
for(i=1;i<=n;++i)
{
fprintf(g,"\n%d: ",i);
for(q=prim[i];q;q=q->urm)
fprintf(g,"%d ",q->info);
}
}
void DF(int x, int cost)
{
viz[x]=1;
if(x==Y)
{
fprintf(g,"%d\n",cost);
exit(0);
}
Nod *q;
for(q=prim[x];q!=NULL;q=q->urm)
{
if(viz[q->info]==0)
{
viz[q->info]=1;
if(q->info>x) DF(q->info,cost+(q->cost));
else DF(q->info, cost-(q->cost));
}
}
}
void read()
{
fscanf(f,"%d %d %d %d",&n,&m,&X,&Y);
int i,x,y,d;
while(m--)
{
fscanf(f,"%d %d %d",&x,&y,&d);
insert(x,y,d);
}
}
int main()
{
read();
DF(X,0);
debug();
return 0;
}