Cod sursa(job #67540)

Utilizator mariusdrgdragus marius mariusdrg Data 25 iunie 2007 11:20:26
Problema Sate Scor 30
Compilator cpp Status done
Runda preONI 2007, Runda Finala, Clasa a 10-a Marime 1.37 kb
#include<stdio.h>
#include<vector>
#define vi vector <int>
#define pb push_back
#define vii vector <int> :: iterator

const int maxn = 30001;

using namespace std;

int m;
int x;
int y;
int x1;
int y1;
int n;
int c;
int st[maxn];
bool ver[maxn];
int i;
int j;
int l;
int cos[maxn];
vi vect[maxn];
vi cost[maxn];

int main()
{
        freopen("sate.in","r",stdin);
        freopen("sate.out","w",stdout);
        scanf("%d %d %d %d",&n,&m,&x,&y);
        for(i = 1;i <= n; ++i)
        {
                scanf("%d %d %d",&x1,&y1,&c);
                vect[x1].pb(y1);
                cost[x1].pb(c);
                vect[y1].pb(x1);
                cost[y1].pb(-c);
        }
        i = 1;
        l = 1;
        st[1] = x;
        for(;i;++i)
        {
                vii it;
                vii it1;
                for(it = vect[st[i]].begin(),it1 = cost[st[i]].begin();it != vect[st[i]].end(); ++it,++it1)
                {
                        int x = *it;
                        if (!ver[*it])
                        {
                                st[++l] = *it;
                                cos[*it] = cos[st[i]] + *it1;
                                ver[*it] = 1;
                        }
                }
                if (ver[y]) break;
        }
        
        printf("%d\n",cos[y]);
        return 0;
}