Cod sursa(job #1752352)

Utilizator otnielMercea Otniel otniel Data 3 septembrie 2016 16:33:18
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
vector<int> a[30003];
vector<int> distanta[30003];
int coada[30003];
int pana[30003];
int n,m,x,y,num,ce;
string str;
void parcurgere(int start)
{
    int inceput,sfarsit;
    inceput=sfarsit=1;
    coada[inceput]=start;
    while(inceput<=sfarsit)
    {
        for(int i=0;i<a[coada[inceput]].size();i++)
        {
            if(pana[a[coada[inceput]][i]]==0)
            {
                if(a[coada[inceput]][i]==y)
                {
                    ofstream g("sate.out");
                    g<<pana[coada[inceput]]+distanta[coada[inceput]][i];
                    return;
                }
                pana[a[coada[inceput]][i]]=pana[coada[inceput]]+distanta[coada[inceput]][i];
                sfarsit++;
                coada[sfarsit]=a[coada[inceput]][i];
            }
        }
        inceput++;
    }
}
int getnum()
{
    num=0;
    while(str[ce]>='0'&&str[ce]<='9')
        {num=num*10+str[ce]-'0';ce++;}
    ce++;
    return num;
}
int main()
{

    ifstream f("sate.in");

    f>>n>>m>>x>>y;
    f.get();
    for(int i=0;i<m;i++)
    {
        int o1,o2,dist;
        ce=0;
        getline(f,str);
        o1=getnum();
        o2=getnum();
        dist=getnum();
        a[o1].push_back(o2);
        a[o2].push_back(o1);
        if(o1<o2)
        {distanta[o1].push_back(dist);
        distanta[o2].push_back(-dist);}
        else
        {distanta[o1].push_back(-dist);
        distanta[o2].push_back(dist);}

    }
        parcurgere(x);
}