二分,#7 WA ,玄关
查看原帖
二分,#7 WA ,玄关
769006
crzcqh楼主2024/8/10 14:59
#include<bits/stdc++.h>
#define ll long long
#define N 1005
#define M 10005
#define inf INT_MAX
#define reg register
using namespace std;
ll n,m,k,u,v,w,ans=-1,l,r,mid,Max; 
ll dis[N],vis[N];
vector<pair<ll,ll> > edge[N];
deque<ll> q;
inline ll read(){
	ll f=1,s=0;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		s=(s<<3)+(s<<1)+ch-48;
		ch=getchar();
	}
	return f*s;
}
bool check(ll x){
	memset(dis,0x3f,sizeof dis);
	memset(vis,0,sizeof vis);
	dis[1]=0,q.push_back(1);
	while(!q.empty()){
		u=q.front();
		q.pop_front();
		if(vis[u]==1) 
			continue;
		vis[u]=1;
		for(auto i : edge[u]){
			v=i.first,w=i.second;
			if(dis[v]>dis[u]){
				if(w<=x){
					dis[v]=dis[u];
					q.push_front(v);
				}else{
					dis[v]=dis[u]+1;
					q.push_back(v);
				}
			}
		}
	}
	if(dis[n]<=k)
		return 1;
	else 
		return 0;
}
int main(){
	n=read(),m=read(),k=read();
	for(reg ll i=1;i<=m;i++){
		u=read(),v=read(),w=read();
		edge[u].push_back(make_pair(v,w));
		edge[v].push_back(make_pair(u,w));
		Max=max(Max,w);
	}
	l=1,r=Max;
	while(l<r){
		mid=(l+r)/2;
		if(check(mid))
			r=mid;
		else
			l=mid+1; 
	}
	if(l!=1)
		printf("%lld",l);
	else 
		puts("-1");
	return 0;
}

2024/8/10 14:59
加载中...