Cod sursa(job #686265)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 21 februarie 2012 15:52:21
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include<cstdio>
#define N 30001
typedef struct nod
{int info,cost;
struct nod *next;}Nod;
bool c[N];
Nod *l[N],*t;
int i,n,m,x,y,j,p,u,k,s[N];

void A(int i,int j,int k)
{Nod *p=new Nod;
p->info=j,p->cost=k,p->next=l[i],l[i]=p;}

int B(int i,int j)
{for(Nod *p=l[i];p;p=p->next)
if(p->info==j)
      return p->cost;
return 0;}

int main()
{FILE *f=fopen("sate.in","r"),*g=fopen("sate.out","w");
fscanf(f,"%d%d%d%d",&n,&m,&x,&y),c[x]=1;
while(m--)
      fscanf(f,"%d%d%d",&i,&j,&k),A(i,j,k),A(j,i,-k);
for(t=l[x];t;t=t->next)
      s[u++]=t->info;
for(i=x;p<u;p++)
      {if(c[y])
             break;
      j=s[p],c[j]=1;
      for(t=l[j];t;t=t->next)
             {k=t->info;
             if(!c[k])       
                    {s[u++]=k;
                    if(i<j)
                           if(k<i)
                                  A(k,i,B(k,j)-B(i,j));
                           else
                                  if(k<j)
                                        A(i,k,B(i,j)-B(k,j));
                                  else
                                        A(i,k,B(j,k)+B(i,j));
                    else
                           if(k<j)
                                  A(k,i,B(k,j)+B(j,i));
                           else
                                  if(k<i)
                                        A(k,i,B(j,i)-B(j,k));
                                  else
                                        A(i,k,B(j,k)-B(j,i));}}}
fprintf(g,"%d",B(x,y));
return 0;}