Cod sursa(job #2135620)

Utilizator NannyiMaslinca Alecsandru Mihai Nannyi Data 18 februarie 2018 23:19:13
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
#include <vector>
using namespace std;
#define nmax 30005

struct str
{
    int nod,cost;
};

vector<str>Q[nmax];

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

int n,m,x,y,dist[nmax];
bool passed=0;

void read()
{
    fscanf(f,"%d %d %d %d",&n,&m,&x,&y);
    for (int i=1; i<=m; ++i)
    {
        int r1,r2,r3;
        fscanf(f,"%d %d %d",&r1,&r2,&r3);
        if (r1>r2)
        {
            Q[r1].push_back({r2,-r3});
            Q[r2].push_back({r1,r3});
        }
        else
        {
            Q[r1].push_back({r2,r3});
            Q[r2].push_back({r1,-r3});
        }
    }
}

void dfs(int nod)
{
    if (nod==y)
        passed=true;
    if (passed)
        return;
    for (auto w:Q[nod])
    {
        if (!dist[w.nod]&&!passed)
        {
            dist[w.nod]=dist[nod]+w.cost;
            dfs(w.nod);
        }
    }
}

void solve()
{
    dist[x]=1;
    dfs(x);
    fprintf(g,"%d",dist[y]-1);
}

int main()
{
    read();
    solve();
    return 0;
}