Pagini recente » Cod sursa (job #1315978) | Cod sursa (job #2666508) | Cod sursa (job #1319711) | Cod sursa (job #350119) | Cod sursa (job #982430)
Cod sursa(job #982430)
#include <cstdio>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <cstring>
const int MAX_N(250001);
const int MAX_K(1001);
int n, m, x, y;
int Dp [MAX_N];
std::vector<std::pair<int,int>> Graph [MAX_N];
inline void Read (void)
{
std::freopen("pscnv.in","r",stdin);
std::scanf("%d %d %d %d",&n,&m,&x,&y);
for (int i(1), a, b, c ; i <= m ; ++i)
{
std::scanf("%d %d %d",&a,&b,&c);
Graph[a].push_back(std::make_pair(b,c));
Graph[b].push_back(std::make_pair(a,c));
}
std::fclose(stdin);
}
inline void Print (void)
{
std::freopen("pscnv.out","w",stdout);
std::printf("%d\n",Dp[y]);
std::fclose(stdout);
}
inline void Dynamic (void)
{
int vertex(1);
std::queue<int> queue [MAX_K];
queue[0].push(x);
std::memset(Dp + 1,0x3f,sizeof(*Dp) * n);
Dp[x] = 0;
int i(0), node;
while (vertex)
{
while (queue[i].empty() && i < MAX_K)
++i;
if (i == MAX_K)
{
i = 0;
continue;
}
node = queue[i].front();
queue[i].pop();
--vertex;
for (auto it : Graph[node])
if (Dp[i] < Dp[it.first] && it.second < Dp[it.first])
{
Dp[it.first] = std::max(Dp[i],it.second);
++vertex;
queue[Dp[it.first] % MAX_K].push(it.first);
}
}
}
int main (void)
{
Read();
Dynamic();
Print();
return 0;
}