Pagini recente » Cod sursa (job #554286) | Cod sursa (job #2044395) | Cod sursa (job #1806598) | Cod sursa (job #1816345) | Cod sursa (job #1982458)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
vector<short> vecini[30005];
vector<int> distanta[30005];
short coada[30005];
string s;
int k,n,m,x,y,a,b,start,d,cost[30005],deparcurs[30005],c;
int next(int &c)
{
int nr=0,cif;
while(s[c]!=' ' && c<s.size())
{
cif=s[c]-'0';
nr=nr*10+cif;
++c;
}
++c;
return nr;
}
void bfs(int x)
{
k=1;
b=0;
coada[k]=x;
while(b<k)
{
++b;
start=coada[b];
for(int i=0;i<deparcurs[start];++i)
{
if(cost[vecini[start][i]]==0)
{
cost[vecini[start][i]]=cost[start]+distanta[start][i];
++k;
coada[k]=vecini[start][i];
if(vecini[start][i]==y) break;
}
}
}
}
int main()
{
f>>n>>m>>x>>y; getline(f,s);
for(int i=1;i<=m;++i)
{
getline(f,s);
c=0;
a=next(c); b=next(c); d=next(c);
if(b<a) swap(a,b);
vecini[a].push_back(b); vecini[b].push_back(a);
distanta[a].push_back(d); distanta[b].push_back(-d);
}
for(int i=1;i<=n;++i)
{
deparcurs[i]=vecini[i].size();
}
bfs(x);
g<<cost[y];
return 0;
}