Cod sursa(job #1116929)

Utilizator andreeadeacAndreea Ioana Deac andreeadeac Data 22 februarie 2014 21:49:23
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <cstdio>
#include<vector>
using namespace std;

FILE *f=fopen("sate.in","r"), *g=fopen("sate.out","w");

int n,m,x,y;
struct muchii{int s,d,c;}a[100025];
vector<int>v[30005];
int viz[30005],t[30005],c[30005];

int main(){
    int p,u,i,nod,j;
    fscanf(f,"%d%d%d%d",&n,&m,&x,&y);
    for(i=1;i<=m;i++){
        fscanf(f,"%d%d%d",&a[i].s,&a[i].d,&a[i].c);
        v[a[i].s].push_back(a[i].d);
        v[a[i].d].push_back(a[i].s);
    }
    p=u=1;
    c[p]=x;
    viz[x]=1;
    t[x]=0;
    while(p<=u){
        nod=c[p];
        for( i=0; i<v[nod].size() && p<=u; i++)
            if(viz[v[nod][i]]==0){
                j=v[nod][i];
                u++;
                c[u]=j;
                t[j]=nod;
                viz[j]=1;
                if(j==y)
                    p=u+1;
            }
        p++;
    }
    p=0;
    for(i=y;i>0;i=t[i]){
        u=t[i];
        for(j=1;j<=m;j++){
            if(a[j].s==u && a[j].d==i){
                p=p+a[j].c;
                j=m+1;
                }
            else
                if(a[j].s==i && a[j].d==u){
                    p=p-a[j].c;
                    j=m+1;
                }
        }
    }
    fprintf(g,"%d\n",p);
    return 0;
}