Cod sursa(job #641426)

Utilizator TheShadowsAlexandru Cristian TheShadows Data 28 noiembrie 2011 13:02:21
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
const int N=30001;
struct stuff{
    int y,d;};
vector <stuff> a[N];
queue <stuff> v;
stuff h;
int lmin,n,m;
void lee(int start,int x)
{
    int u,d,poz[N],g;
    for(int i=1;i<=n;i++)
        poz[i]=-1;
    poz[start] = 0;
    while(!v.empty())
    {
        h=v.front();
        v.pop();
        u=h.y;
        d=h.d;
        for(int i=0;i<a[u].size();i++)
        {
            g=a[u][i].y;
            if(poz[g]==-1)
            {
                poz[g]=0;
                h.y=g;
                if(u<=g)
                    h.d=d+a[u][i].d;
                else
                    h.d=d-a[u][i].d;
                if(g!=x)
                    v.push(h);
                else
                {
                    lmin = h.d;
                    return;
                }
            }
        }
    }
}
int main()
{
    freopen("sate.in","r",stdin);
    freopen("sate.out","w",stdout);
    int x,y,k1,k2,d,i;
    scanf("%d%d%d%d",&n,&m,&x,&y);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&k1,&k2,&d);
        h.y=k2;
        h.d=d;
        a[k1].push_back(h);
        h.y=k1;
        a[k2].push_back(h);
    }
    /*
    for(i=1 ; i<=n ; i++)
    {
        printf("din %d:\t",i);
        for(int j=0 ; j<a[i].size() ; j++) printf("(%d,%d) ",a[i][j].y,a[i][j].d);
        printf("\n");
    }
    */
    h.y=x;
    h.d=0;
    v.push(h);
    lmin=999999;
    lee(x,y);
    printf("%d\n",lmin);
    return 0;
}