Cod sursa(job #67816)

Utilizator mariusdrgdragus marius mariusdrg Data 25 iunie 2007 17:28:13
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 8.78 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 <= m; ++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;
                                                                                                                                                ver[x] = 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;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                }