제출 #760300

#제출 시각아이디문제언어결과실행 시간메모리
760300raysh07꿈 (IOI13_dreaming)C++17
100 / 100
71 ms14568 KiB
#include "dreaming.h" #include <bits/stdc++.h> using namespace std; int n, m, l; const int N = 1e5 + 69; vector <pair<int, int>> adj[N]; vector <int> comp; bool vis[N]; int dist[N], mx[N]; void dfs(int u){ vis[u] = true; comp.push_back(u); for (auto [v, w] : adj[u]){ if (!vis[v]) dfs(v); } } void bfs(int i){ for (auto x : comp) dist[x] = -1; dist[i] = 0; queue <int> q; q.push(i); while (!q.empty()){ int u = q.front(); q.pop(); for (auto [v, w] : adj[u]){ if (dist[v] == -1){ dist[v] = dist[u] + w; q.push(v); } } } for (auto x : comp) mx[x] = max(mx[x], dist[x]); } int get(){ pair<int, int> best = make_pair(-1, -1); for (auto x : comp){ best = max(best, make_pair(dist[x], x)); } return best.second; } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { n = N; m = M; l = L; for (int i = 0; i < m; i++){ adj[A[i]].push_back({B[i], T[i]}); adj[B[i]].push_back({A[i], T[i]}); } int ans = 0; vector <int> ok; for (int i = 0; i < n; i++){ if (vis[i]) continue; comp.clear(); dfs(i); bfs(i); int g1 = get(); bfs(g1); int g2 = get(); bfs(g2); int mn = 1e9; for (auto x : comp) mn = min(mn, mx[x]); int ma = -1; for (auto x : comp) ma = max(ma, mx[x]); ans = max(ans, ma); ok.push_back(mn); } sort(ok.begin(), ok.end(), greater<int>()); if (ok.size() == 2){ ans = max(ans, l + ok[0] + ok[1]); } else if (ok.size() >= 3){ ans = max(ans, l + ok[0] + ok[1]); ans = max(ans, 2 * l + ok[1] + ok[2]); } return ans; } // int main(){ // int n, m, l; cin >> n >> m >> l; // int a[m], b[m], t[m]; // for (int i = 0; i < m; i++) cin >> a[i] >> b[i] >> t[i]; // cout << travelTime(n, m, l, a, b, t); // return 0; // }
#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...