Cod sursa(job #1341363)

Utilizator sulzandreiandrei sulzandrei Data 12 februarie 2015 17:39:40
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>
#include <vector>
#include <queue>
#include <utility>
#define nmax 30002
#define mp make_pair
#define pb push_back
#define fs g[x][i].first
using namespace std;
FILE *f1=fopen("sate.in","r"),*f2=fopen("sate.out","w");
vector < pair < int, int > > g[nmax];
queue <int> q;
int n,m,x,y,i,t[nmax],c;
bool use[nmax];
void citire ()
{
    fscanf(f1,"%d%d%d%d",&n,&m,&x,&y);
    for(i=1;i<=m;i++)
    {
        int j,k,l;
        fscanf(f1,"%d%d%d",&j,&k,&l);
        g[j].pb(mp(k,l));
        g[k].pb(mp(j,l));
    }
}
void bfs(int x,int y)
{
    q.push(x);
    use[x]=1;
    while(!q.empty())
    {
        x=q.front();q.pop();
        for(int i=0;i<g[x].size();i++)
        {
            if(!use[fs])
            {
              use[fs]=true;
              t[fs]=x;
              q.push(fs);
            }
        }
    }
}
int main()
{
    citire();
    bfs(x,y);
    int tt=y;
    int sc;
    while(tt!=x)
    {
        for(i=0;i<g[tt].size();i++)
            if(g[tt][i].first==t[tt])
            sc=g[tt][i].second;
        if(t[tt]<tt)c+=sc;
        else c-=sc;
        tt=t[tt];
    }
    int a;
    fprintf(f2,"%d",c);
    fclose(f1);
    fclose(f2);
    return 0;
}