求调
查看原帖
求调
536663
lxair楼主2024/9/11 12:52

#include<bits/stdc++.h>
using namespace std;
#define int long long
map<pair<int,int>,int> biao;
int cnt,cnt1;
int tail[1000005];
int last[1000005];
int value[1000005];
vector<int> g[1000005];
vector<pair<int,int> > a;
void margan(int x,int y,int s,int t){
	
	if(biao.find({x,s})==biao.end()){
		biao[{x,s}]=++cnt;
		a.push_back({x,s});
	}
	if(biao.find({y,t})==biao.end()){
		biao[{y,t}]=++cnt;
		a.push_back({y,t});
	}int l=biao[{x,s}],r=biao[{y,t}];
	//cout<<l<<" "<<r<<endl;
	int temp=tail[l];
	last[++cnt1]=temp;
	tail[l]=cnt1;
	value[cnt1]=r;
}
int ans[1000005];
int ans1[1000005];
int cnt2;int n,m;
int dfs(int x){
	
	if(a[x].first==n){
		return a[x].second;
	}
	int maxn=2147483647;
	int j=0;
	for(int i=tail[x];i!=0;i=last[i]){
		int temp=dfs(value[i]);
		//删边
		if(i==tail[x]){
			tail[x]=last[i];
		}else{
			last[j]=last[i];
		}
		maxn=min(maxn,temp);
		j=i;
	}
	
	return maxn;
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	a.push_back({0,0});
	for(int i=1;i<=m;i++){
		int x,y,s,t;
		cin>>x>>y>>s>>t;
		g[x].push_back(s);
		g[y].push_back(t);
		margan(x,y,s,t);
	}
	
	for(int i=1;i<=n;i++){
		sort(g[i].begin(),g[i].end());
		for(int j=1;j<g[i].size();j++){
			if(g[i][j-1]==g[i][j])continue;
			margan(i,i,g[i][j-1],g[i][j]);
		}
	}
	for(auto i=g[1].rbegin();i!=g[1].rend();i++){		
		int temp=dfs(biao[{1,*i}]);
		if(temp!=2147483647){
			ans[++cnt2]=*i;
			ans1[cnt2]=temp;
		}
	}
	for(int i=1;i<=cnt2+1-i;i++){
		swap(ans[i],ans[cnt2+1-i]);
		swap(ans1[i],ans1[cnt2+1-i]);
	}
	int q;
	cin>>q;
	for(int i=1;i<=q;i++){
		int t;
		cin>>t;
		int n=upper_bound(ans1+1,ans1+cnt2+1,t)-ans1;
		if(n==1){
			cout<<-1<<'\n';
		}else{
			cout<<ans[n-1]<<'\n';
		}
	}
}

一直wa

2024/9/11 12:52
加载中...