제출 #1277349

#제출 시각아이디문제언어결과실행 시간메모리
1277349crispxx꿈 (IOI13_dreaming)C++20
47 / 100
86 ms19648 KiB
#include "dreaming.h" #include <bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() #define pb push_back #define ar array template <typename A, typename B> bool chmin(A &a, const B &b) { if(a > b) { return a = b, true; } return false; } template <typename A, typename B> bool chmax(A &a, const B &b) { if(a < b) { return a = b, true; } return false; } int travelTime(int n, int m, int l, int A[], int B[], int T[]) { vector<vector<ar<int, 2>>> adj(n); // cout << n << ' ' << m << ' ' << l << endl; for(int i = 0; i < m; i++) { // cout << i << endl; adj[A[i]].pb({B[i], T[i]}); adj[B[i]].pb({A[i], T[i]}); } vector<int> used(n), mx(n), mx2(n), d(n); auto dfs = [&](auto &&self, int v) -> void { used[v] = true; mx[v] = d[v]; for(auto [to, w] : adj[v]) { if(used[to]) continue; d[to] = d[v] + w; self(self, to); chmax(mx2[v], mx[to]); if(mx2[v] > mx[v]) swap(mx2[v], mx[v]); } }; for(int i = 0; i < n; i++) { // cout << i << endl; if(!used[i]) { dfs(dfs, i); } } fill(all(used), false); vector<int> mx_root(n); int mn = 1e9; long long res1 = 0, res2 = 0; auto dfs2 = [&](auto &&self, int v) -> void { used[v] = true; int ans = max(mx_root[v], mx[v] - d[v]); chmin(mn, ans); chmax(res2, ans); for(auto [to, w] : adj[v]) { if(used[to]) continue; chmax(mx_root[to], mx_root[v] + w); int val = mx[v]; if(val == mx[to]) val = mx2[v]; chmax(mx_root[to], (val - d[v]) + w); self(self, to); } }; for(int i = 0; i < n; i++) { if(!used[i]) { mn = 1e9; dfs2(dfs2, i); res1 += mn; } } return max(res1 + l, res2); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...