一直输出 -1,求助!
#include <bits/stdc++.h>
#define rint register int
#define int long long
#define endl '\n'
using namespace std;
const int N = 1e3 + 5;
const int M = 2e4 + 5;
int n, m, k;
int h[N], e[M], w[M], ne[M], idx;
priority_queue<pair<int, int>> q;
int dist[N];
bool v[M];
void add(int a, int b, int c)
{
e[++idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx;
}
bool dijkstra(int x)
{
memset(v, false, sizeof v);
memset(dist, 0x3f, sizeof dist);
dist[1] = 0;
q.push(make_pair(0, 1));
while (!q.empty())
{
int x = q.top().second;
q.pop();
if (v[x])
{
continue;
}
v[x] = true;
for (rint i = h[x]; i; i = ne[i])
{
int y = e[i];
int z = w[i] > x;
if (dist[y] > dist[x] + z)
{
dist[y] = dist[x] + z;
q.push(make_pair(-dist[y], y));
}
}
}
return dist[n] <= k;
}
signed main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
memset(h, -1, sizeof h);
cin >> n >> m >> k;
for (rint i = 1; i <= m; i++)
{
int a, b, c;
cin >> a >> b >> c;
add(a, b, c);
add(b, a, c);
}
int l = 0, r = 1e6 + 1;
while (l < r)
{
int mid = l + r >> 1;
if (dijkstra(mid) == true)
l = mid;
else
l = mid + 1;
}
if (r == 1e6 + 1)
{
cout << -1;
return 0;
}
cout << r << endl;
return 0;
}