Pagini recente » Cod sursa (job #449413) | Cod sursa (job #2475635) | Cod sursa (job #1599031) | Cod sursa (job #2289967) | Cod sursa (job #1397196)
#include<fstream>
#include<vector>
#include<queue>
#define INF 9999999
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
struct muc
{
int x;
int c;
}s;
queue <int> p;
vector <muc> l[30001];
int n,m,x,y,i,j,d[30001],z;
vector <muc> q;
void merg(int x ,int y)
{
p.push(x);
int ok=0;
while(!p.empty())
{
int k=p.front();
if(k==y)
ok=1;
if(ok==0)
for(int i=0;i<l[k].size();i++)
if(d[l[k][i].x]>d[k]+l[k][i].c)
{
d[l[k][i].x]=d[k]+l[k][i].c;
p.push(l[k][i].x);
}
p.pop();
}
}
void merg2(int x,int y)
{
p.push(x);
while(!p.empty())
{
int k=p.front();
for(int i=0;i<l[k].size();i++)
if(d[l[k][i].x]==d[k]-l[k][i].c)
{
p.push(l[k][i].x);
if(l[k][i].x>k)
z-=2*l[k][i].c;
}
p.pop();
}
}
int main()
{
f>>n>>m>>x>>y;
for(i=1;i<=m;i++)
{
int a,b;
f>>a>>b>>s.c;
s.x=a;
l[b].push_back(s);
s.x=b;
l[a].push_back(s);
}
for(i=1;i<=n;i++)
d[i]=INF;
d[x]=0;
merg(x,y);
z=d[y];
merg2(y,x);
g<<z;
return 0;
}