Cod sursa(job #1399607)

Utilizator mariana-geanina.stroeStroe Mariana Geanina mariana-geanina.stroe Data 24 martie 2015 20:31:12
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

int n,m,s[9999],viz[9999],x,y,i,a,b,inceput,sfarsit,d,dist;

using namespace std;
int main()
{

    queue<int> q;
    vector<int> v[9999];
    vector<int> distanta[9999];
    fstream f("sate.in");
    ofstream g("sate.out");
    //if(f==NULL) cout<<"eroare";
    f>>n>>m>>inceput>>sfarsit;
    //for(i=1;i<=n;i++) viz[i]=0;
    for(i=0;i<m;i++)
    {
        f>>x>>y>>d;
        //cout<<x<<" "<<y<<"  "<<d<<" ";
        v[x].push_back(y);
        distanta[x].push_back(d);
        v[y].push_back(x);
        distanta[y].push_back(d);
    }
    /*for(i=1;i<=n;i++)
    {
        cout<<i<<":";
        for(j=0;j<v[i].size();j++) cout<<v[i][j]<<" ";
        cout<<endl;
    }
    for(i=1;i<=m;i++)
    {
        cout<<i<<":";
        for(j=0;j<distanta[i].size();j++) cout<<distanta[i][j]<<" ";
        cout<<endl;
    }*/
     q.push(inceput);
    viz[inceput]=1;
    while(!q.empty())
    {
        a=q.front();
        q.pop();
        for(i=0;i<v[a].size();i++)
        {
            b=v[a][i];
            d=distanta[a][i];
            if(viz[b]==0)
            {
                q.push(b);
               // tata[b]=a;
                viz[b]=1;
               // nr++;
               // parc[nr]=b;

            if(a>b) s[b]=s[a]-d;
            else
            if(a<b) s[b]=s[a]+d;
             if(b==sfarsit)
             { g<<s[sfarsit];
                 //fprintf(g,"%d",dist);
             f.close();
             g.close();
             return 0;}}
        }
    }
   g<<s[sfarsit];
   //fprintf(g,"%d",dist);
    f.close();
    g.close();
    return 0;
}