Cod sursa(job #898567)

Utilizator mads2194FMI - Andrei Stroe mads2194 Data 28 februarie 2013 10:43:21
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.02 kb
#include<cstdio>
#include<vector>

#define NM 30002

using namespace std;

struct elem
{
    int d,to;
};

vector <elem> a[NM];

int n,st,end;
bool viz[NM];

void read()
{
    int m;
    int x,y,dr;
    scanf("%d %d %d %d\n",&n,&m,&st,&end);

    elem e;
    while(m--)
        {
            scanf("%d %d %d\n",&x,&y,&dr);
            e.to = y;
            e.d = dr;
            a[x].push_back(e);
            e.to = x;
            e.d = -dr;
            a[y].push_back(e);
        }
}

/*int sgn(int x,int y)
{
   if(x>y) return 1;
   return -1;
}*/


void dfs(int pos, int dist)
{
    if(viz[pos]) return;
    viz[pos]=1;

    if(pos==end)
    {
        printf("%d",dist);
        return;
    }

    for(size_t i=0;i<a[pos].size();++i)
        dfs(a[pos][i].to,dist+a[pos][i].d);
}

int main()
{
    freopen("sate.in","r",stdin);
    freopen("sate.out","w",stdout);

    read();

    //for(int i=1;i<=n;++i)
    //    if(! viz[i])
    dfs(st,0);

    return 0;
}
#include<cstdio>
#include<vector>

#define NM 30002

using namespace std;

struct elem
{
    int d,to;
};

vector <elem> a[NM];

int n,st,end;
bool viz[NM];

void read()
{
    int m;
    int x,y,dr;
    scanf("%d %d %d %d\n",&n,&m,&st,&end);

    elem e;
    while(m--)
        {
            scanf("%d %d %d\n",&x,&y,&dr);
            e.to = y;
            e.d = dr;
            a[x].push_back(e);
            e.to = x;
            e.d = -dr;
            a[y].push_back(e);
        }
}

/*int sgn(int x,int y)
{
   if(x>y) return 1;
   return -1;
}*/


void dfs(int pos, int dist)
{
    if(viz[pos]) return;
    viz[pos]=1;

    if(pos==end)
    {
        printf("%d",dist);
        return;
    }

    for(size_t i=0;i<a[pos].size();++i)
        dfs(a[pos][i].to,dist+a[pos][i].d);
}

int main()
{
    freopen("sate.in","r",stdin);
    freopen("sate.out","w",stdout);

    read();

    //for(int i=1;i<=n;++i)
    //    if(! viz[i])
    dfs(st,0);

    return 0;
}