超时,二分法求优化
查看原帖
超时,二分法求优化
1357527
daiziqi123456楼主2025/6/29 13:24
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,t;
struct node{
	int v,w;
};
int u,v,w;
vector<node>e[305];
int s,ee;
int l,r,rr=INT_MIN;
int vis[305];
bool flag=false;
void dfs(int u,int x){
	if(flag)return;
	if(u==ee){
		flag=true;
		return;
	}
	for(int i=0;i<e[u].size();i++){
		int v=e[u][i].v;
		int w=e[u][i].w;
		if(vis[v]==0&&w<=x){
			vis[v]=1;
			dfs(v,x);
		}
	}
	return;
}
bool check(int x){
	memset(vis,0,sizeof(vis));
	vis[s]=1;
	flag=false;
	dfs(s,x);
	return flag;
}
int ans;
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>m>>t;
	for(int i=1;i<=m;i++){
		cin>>u>>v>>w;
		e[u].push_back({v,w}); 
		rr=max(rr,w);
	}
	while(t--){
		ans=-1;
		cin>>s>>ee;
		l=0,r=rr;
		while(l<=r){
			int mid=(l+r)/2;
			if(check(mid)){
				r=mid-1;
				ans=mid;
			}else l=mid+1;
		}
		cout<<ans<<'\n';
	}
	return 0;
}
2025/6/29 13:24
加载中...