Pagini recente » Cod sursa (job #2379853) | Istoria paginii runda/ceva_ez_v2/clasament | Cod sursa (job #2134192) | Cod sursa (job #2813693) | Cod sursa (job #1861289)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
const int Max = 30007;
int n,m,vaz[Max],x,y;
long long d[Max];
vector<pair<int,long long> > drum[Max];
queue<int> q;
void bfs()
{
vaz[x]=true;
q.push(x);
while(!q.empty())
{
x=q.front();
q.pop();
if(x==y)
{
break;
}
for(int i=0;i<drum[x].size();++i)
{
if(!vaz[drum[x][i].first])
{
vaz[drum[x][i].first]=true;
d[drum[x][i].first]=d[x]+drum[x][i].second;
q.push(drum[x][i].first);
}
else if(d[drum[x][i].first]>d[x]+drum[x][i].second)
{
vaz[drum[x][i].first]=true;
d[drum[x][i].first]=d[x]+drum[x][i].second;
q.push(drum[x][i].first);
}
}
}
}
int main()
{
int sat1,sat2,l;
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&x,&y);
if(x>y) swap(x,y);
for(int i=1;i<=m;++i)
{
scanf("%d%d%d",&sat1,&sat2,&l);
drum[sat1].push_back(make_pair(sat2, l));
l*= -1;
drum[sat2].push_back(make_pair(sat1, l));
}
bfs();
printf("%lld",d[y]);
return 0;
}