Pagini recente » Cod sursa (job #562969) | Cod sursa (job #478218) | Clasament fmi-no-stress-9 | Cod sursa (job #2316961) | Cod sursa (job #1341289)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream in("sate.in");
ofstream out("sate.out");
struct tip{int j,d;};
queue <int>q;
int main()
{
int n,m,i,x,y,s=0,au,b,d,u;
in>>n>>m>>x>>y;
x--;
y--;
vector<int>v[n];
vector<struct tip>a[n];
int c[n],pi[n];
for(i=0;i<n;i++)
{
c[i] = false;
pi[i]=0;
}
struct tip ele;
for(i=0;i<m;i++)
{
in>>au>>b>>d;
au--;
b--;
ele.j = b;
ele.d=d;
a[au].push_back(ele);
ele.j=au;
a[b].push_back(ele);
v[au].push_back(b);
v[b].push_back(au);
}
c[x] = true;
q.push(x);
while(!q.empty())
{
u = q.front();
q.pop();
for(vector<int>::iterator it =v[u].begin();it!=v[u].end();++it)
if (!c[*it])
{
c[*it]=true;
q.push(*it);
pi[*it] = u;
}
}
int sup;
struct tip z;
bool ok = true;
while(ok)
{
for(vector<struct tip>::iterator it=a[y].begin();it!=a[y].end();++it)
{
if ((*it).j==pi[y])
{
sup = (*it).d;
continue;
}
}
if (pi[y]<y)
s = s+sup;
else
s=s- sup;
y = pi[y];
if (y == x)
ok = false;
}
out<<s;
return 0;
}