#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+10,INF = 0x3f3f3f3f;
int head[N],ver[N],nex[N],edge[N],vis[N],dis[N];
typedef pair<int,int> P;
int l=0,r=1e6,mid;
int n,m,k,cnt;
void add(int x,int y,int w){
ver[++cnt] = y;
edge[cnt] = w;
nex[cnt] = head[x];
head[x] = cnt;
}
void read(){
int x,y,w;
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&w);
add(x,y,w);add(y,x,w);
}
}
bool check(int x){
for(int i=0;i<N;i++)
dis[i] = INF,vis[i]=0;
priority_queue<P> q;
q.push(make_pair(0,1));dis[1] = 0;
while(q.size()){
int u =q.top().second;q.pop();
if(vis[u]) continue;
vis[u] = 1;
for(int i=head[u];i;i=nex[i]){
int v = ver[i],w = edge[i];
int nd = dis[u] + (w>x?1:0);
if(dis[v] > nd){
dis[v] = nd;
if(!vis[v])
q.push(make_pair(-dis[v],v));
}
}
}
return (dis[n] <= k);
}
void solve(){
while(l<=r){
mid = ((r+l)>>1);
if(check(mid))
r = mid-1;
else l = mid+1;
}
if(r==1e6) puts("-1");
else printf("%d\n",l);
}
int main(){
read();
solve();
return 0;
}
一本通1496:【例 3】架设电话线
最新推荐文章于 2024-07-08 17:11:54 发布