Submission #1122541

#TimeUsernameProblemLanguageResultExecution timeMemory
1122541Trisanu_DasAirplane (NOI23_airplane)C++20
100 / 100
671 ms23704 KiB
#include <bits/stdc++.h>
using namespace std;

int main(){
	int n, m;
	cin >> n >> m;
	vector<int> v(n);
	vector<vector<int >>  g(n);
	for(auto &e:v) cin >> e;
	for(int i=0; i<m; i++){
		int a, b;
		cin >> a >> b;
		a--; b--;
		g[a].push_back(b);
		g[b].push_back(a);
	}
	vector<int> ans(n, -1), ans2(n, -1), tm(n, -1), tm2(n, -1);
	priority_queue<tuple<int, int, int >>  pq;
	pq.push({0, 0, 0});
	while(pq.size()){
		auto [t, h, cur]=pq.top();
		pq.pop();
		if(tm[cur]!=-1) continue;
		t=tm[cur]=-t;
		h=ans[cur]=-h;
		for(auto ch:g[cur]) pq.push({-max(v[ch], t + 1), -max(h, v[ch]), ch});
	}
	pq.push({0, 0, n-1});
	while(pq.size()){
		auto [t, h, cur]=pq.top();
		pq.pop();
		if(tm2[cur]!=-1) continue;
		h=ans2[cur]=-h;
		t=tm2[cur]=-t;
		for(auto ch:g[cur]) pq.push({-max(v[ch], t + 1), -max(h, v[ch]), ch});
	}
	int ans_ = INT_MAX;
	for(int i = 0; i < n; i++) ans_ = min(ans_, tm[i] + tm2[i] + abs(ans[i] - ans2[i]));
	cout << ans_ << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...