Submission #886689

#TimeUsernameProblemLanguageResultExecution timeMemory
886689fanwenAirplane (NOI23_airplane)C++17
100 / 100
272 ms21064 KiB
/* author : bo may can 5 */

#include <bits/stdc++.h>

using namespace std;

#define fi first
#define se second
#define ll long long
#define file(name)                  \
    if(fopen(name".inp", "r"))      \
        freopen(name".inp", "r", stdin), freopen(name".out", "w", stdout); 

const int MAX = 2e5 + 5;

int n, m, a[MAX], f[MAX], g[MAX];
vector <int> adj[MAX];

void dp(int s, int f[]) {
	fill(f + 1, f + n + 1, INT_MAX);
	priority_queue <pair <int, int>, vector <pair <int, int>>, greater <pair <int, int>>> q;
	q.emplace(f[s] = a[s], s);
	while(!q.empty()) {
		auto [du, u] = q.top(); q.pop();
		if(f[u] != du) continue;
		for (auto v : adj[u]) if(f[v] > max(f[u] + 1, a[v])) {
			f[v] = max(f[u] + 1, a[v]);
			q.emplace(f[v], v);
		}
	}
}

void you_make_it(void) {
    cin >> n >> m;
    for (int i = 1; i <= n; ++i) cin >> a[i];
    while(m--) {
    	int u, v; cin >> u >> v;
    	adj[u].push_back(v);
    	adj[v].push_back(u);
    }

    dp(1, f), dp(n, g);
    int ans = INT_MAX;
    for (int i = 1; i <= n; ++i) ans = min(ans, max(f[i], g[i]) * 2);
    // for (int i = 1; i <= n; ++i) cout << f[i] << " \n"[i == n];
    // for (int i = 1; i <= n; ++i) cout << g[i] << " \n"[i == n];
    for (int u = 1; u <= n; ++u) {
    	for (auto v : adj[u]) {
    		ans = min(ans, max(f[u], g[v]) * 2 + 1);
    	}
    }
    cout << ans;
}

signed main() {

#ifdef LOCAL
    freopen("TASK.inp", "r", stdin);
    freopen("TASK.out", "w", stdout);
#endif
    file("airplane");
    auto start_time = chrono::steady_clock::now();

    cin.tie(0), cout.tie(0) -> sync_with_stdio(0);

    you_make_it();

    auto end_time = chrono::steady_clock::now();

    cerr << "\nExecution time : " << chrono::duration_cast <chrono::milliseconds> (end_time - start_time).count() << "[ms]" << endl;

    return (0 ^ 0);
}

// Dream it. Wish it. Do it.

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:12:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   12 |         freopen(name".inp", "r", stdin), freopen(name".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:61:5: note: in expansion of macro 'file'
   61 |     file("airplane");
      |     ^~~~
Main.cpp:12:49: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   12 |         freopen(name".inp", "r", stdin), freopen(name".out", "w", stdout);
      |                                          ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:61:5: note: in expansion of macro 'file'
   61 |     file("airplane");
      |     ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...