Cod sursa(job #1482102)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 5 septembrie 2015 23:51:04
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>
#include <vector>
#define NMAX 300023
using namespace std;
int q[NMAX],cst[NMAX],vis[NMAX];
vector <int> adj[NMAX],cost[NMAX];
int n,m,st,dr,nod1,nod2;
void bfs()
{
    int nod=q[st];
    st++;
    if(st>dr) return;
    vector<int>::iterator it1,it2;
    for(it1=adj[nod].begin(),it2=cost[nod].begin();it1!=adj[nod].end();++it1,++it2)
    {
        if(vis[*it1]==0)
        {
            q[dr]=*it1;
            dr++;
            vis[*it1]=1;
            cst[*it1]=*it2+cst[nod];
            if(*it1==nod2) return;
        }
    }
    bfs();
}
int main()
{
    freopen ("sate.in","r",stdin);
    freopen ("sate.out","w",stdout);
    scanf("%d%d%d%d",&n,&m,&nod1,&nod2);
    int x,y,c;
    for(int i=0;i<m;i++)
    {
        scanf("%d%d%d",&x,&y,&c);
        adj[x].push_back(y);
        cost[x].push_back(c);
        adj[y].push_back(x);
        cost[y].push_back(-c);
    }
    cst[nod1]=0;
    q[1]=nod1;
    vis[nod1]=1;
    st=1;
    dr=2;
    bfs();
    printf("%d\n",cst[nod2]);
}