Cod sursa(job #1397197)

Utilizator Consti.001FMI Dranca Constantin Consti.001 Data 23 martie 2015 12:36:40
Problema Sate Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<fstream>
#include<vector>
#include<queue>
#define INF 9999999
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
struct muc
{
    int x;
    int c;
}s;
queue <int> p;
vector <muc> l[30001];
int n,m,x,y,i,j,d[30001],z;
vector <muc> q;
void merg(int x ,int y)
{
    p.push(x);
    int ok=0;
    while(!p.empty())
    {
        int k=p.front();
        if(k==y)
            ok=1;
        for(int i=0;i<l[k].size();i++)
        if(d[l[k][i].x]>d[k]+l[k][i].c)
        {
            d[l[k][i].x]=d[k]+l[k][i].c;
            p.push(l[k][i].x);
        }
        p.pop();
    }
}
void merg2(int x,int y)
{
    p.push(x);
    while(!p.empty())
    {
        int k=p.front();
        for(int i=0;i<l[k].size();i++)
        if(d[l[k][i].x]==d[k]-l[k][i].c)
        {
            p.push(l[k][i].x);
            if(l[k][i].x>k)
                z-=2*l[k][i].c;
        }
        p.pop();
    }
}
int main()
{
    f>>n>>m>>x>>y;
    for(i=1;i<=m;i++)
    {
        int a,b;
        f>>a>>b>>s.c;
        s.x=a;
        l[b].push_back(s);
        s.x=b;
        l[a].push_back(s);
    }
    for(i=1;i<=n;i++)
        d[i]=INF;
        d[x]=0;
        merg(x,y);
        z=d[y];
        merg2(y,x);
        g<<z;
    return 0;

}