Pagini recente » Rating Dank memer (dankmemer) | Cod sursa (job #1749686) | Cod sursa (job #2606502) | Profil AndreeaPanait | Cod sursa (job #245040)
Cod sursa(job #245040)
using namespace std;
#include <set>
#include <map>
#include <list>
#include <deque>
#include <stack>
#include <queue>
#include <cmath>
#include <cstdio>
#include <vector>
#include <string>
#include <bitset>
#include <utility>
#include <algorithm>
#define pb push_back
#define sz size
#define f first
#define s second
#define II inline
#define ll long long
#define db double
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define all(v) v.begin() , v.end()
#define CC(v) memset((v),0,sizeof((v)))
#define CP(v,w) memcpy((v),(w),sizeof((w)))
#define mp make_pair
typedef vector<int> VI;
typedef pair<int,int> pi;
typedef vector<string> VS;
#define IN "sate.in"
#define OUT "sate.out"
#define N_MAX 1<<15
typedef pair<int,int> pi;
int K,N,M,X,Y;
vector< vector<pi> > A(N_MAX);
char buffer[1<<21];
int D[N_MAX];
II void read(int &aux)
{
aux = 0;
for(;buffer[K] < '0' || buffer[K] > '9';++K);
for(;buffer[K] >= '0' && buffer[K] <= '9';++K)
aux = aux * 10 + buffer[K] - '0';
}
II void scan()
{
freopen(IN,"r",stdin);
freopen(OUT,"w",stdout);
fread(buffer,1,1<<21,stdin);
fclose(stdin);
read(N);
read(M);
read(X);
read(Y);
int x,y,c;
FOR(i,1,M)
{
read(x),read(y),read(c);
A[x].pb( mp(y,c) );
A[y].pb( mp(x,-c) );
}
}
struct Comp
{
bool operator () (int i,int j)
{
return D[i] > D[j];
}
};
priority_queue<int,vector<int>,Comp/*greater<int>*/ > Q;
II void solve()
{
Q.push(X);
int B[N_MAX];
memset(D,90,sizeof(D));
CC(B);
D[X] = 0;
Q.push(X);
++B[X];
for(int nod;!Q.empty();)
{
nod = Q.top();
Q.pop();
--B[nod];
if(B[nod])
continue;
int l = A[nod].sz()-1;
FOR(i,0,l)
{
int fiu = A[nod][i].f;
int dist = A[nod][i].s;
if(D[fiu] > D[nod] + dist)
{
D[fiu] = D[nod] + dist;
Q.push(fiu);
++B[fiu];
}
}
}
printf("%d\n",D[Y]);
}
int main()
{
scan();
solve();
return 0;
}