Pagini recente » Cod sursa (job #264671) | Cod sursa (job #1419195) | Cod sursa (job #597859) | Cod sursa (job #3168149) | Cod sursa (job #2265954)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
const int NMAX=30000;
struct graf
{
int nod, distanta;
};
vector <graf>G[NMAX+5];
queue <int>q;
int viz1[NMAX+5];
int viz2[NMAX+5];
int viz3[NMAX+5];
int t, s;
void bfs(int nod, int v[])
{
int i;
v[nod]=1;
q.push(nod);
while(!q.empty())
{
nod=q.front();
q.pop();
for(i=0;i<G[nod].size();i++)
{
if(v[G[nod][i].nod]==0)
{
q.push(G[nod][i].nod);
v[G[nod][i].nod]=v[nod]+1;
}
}
}
}
void bfs2(int nod, int v[])
{
int i;
v[nod]=1;
q.push(nod);
while(!q.empty())
{
nod=q.front();
q.pop();
for(i=0;i<G[nod].size();i++)
{
if(v[G[nod][i].nod]==0 and t==viz1[G[nod][i].nod]+viz2[G[nod][i].nod])
{
q.push(G[nod][i].nod);
v[G[nod][i].nod]=v[nod]+1;
s=s+G[nod][i].distanta;
}
}
}
}
int main()
{
int n, m, x, y, a, b, d, i;
graf aux;
fin>>n>>m>>x>>y;
for(i=1;i<=m;i++)
{
fin>>a>>b>>d;
aux.distanta=d;
aux.nod=b;
G[a].push_back(aux);
aux.distanta=-d;
aux.nod=a;
G[b].push_back(aux);
}
bfs(x, viz1);
bfs(y, viz2);
t=viz1[x]+viz2[x];
bfs2(x, viz3);
fout<<s<<"\n";
return 0;
}