Cod sursa(job #331026)

Utilizator freak93Adrian Budau freak93 Data 12 iulie 2009 13:41:22
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<fstream>
#include<queue>
#include<cstring>

using namespace std;

ifstream f("sate.in");
ofstream g("sate.out");

const int maxn=30100;
const int INF=0x3f3f3f3f;

struct nod
{
    int w;
    int dis;
    nod *next;
}*one,*a[maxn];

int i,j,dis[maxn],x,y,z,n,m,u,v,k;

bool been[maxn];

queue<int>Q;

int main()
{
    f>>n>>m>>u>>v;
    for(i=1;i<=m;++i)
    {
        f>>x>>y>>z;
        one=new nod;
        one->w=y;
        one->dis=z;
        one->next=a[x];
        a[x]=one;
        one=new nod;
        one->w=x;
        one->dis=-z;
        one->next=a[y];
        a[y]=one;
    }

    memset(been,false,sizeof(been));
    memset(dis,INF,sizeof(dis));

    if(u>v)
        x=u,u=v,v=x;

    dis[u]=0;
    been[u]=true;
    Q.push(u);
    while(!Q.empty()&&dis[v]==INF)
    {
        k=Q.front();
        Q.pop();
        been[k]=false;
        for(nod *it=a[k];it;it=it->next)
            if(dis[k]+it->dis<dis[it->w])
            {
                dis[it->w]=dis[k]+it->dis;
                if(been[it->w]==false)
                    Q.push(it->w),been[it->w]=true;
            }
    }

    g<<dis[v]<<"\n";

    f.close();
    g.close();

    return 0;
}