제출 #1146218

#제출 시각아이디문제언어결과실행 시간메모리
1146218zhasyn꿈 (IOI13_dreaming)C++20
18 / 100
1093 ms10932 KiB
#include "dreaming.h" #include <bits/stdc++.h> #define pb push_back #define pf push_front using namespace std; #define F first #define S second typedef long long ll; #define pii pair <int, int> #define pll pair <ll, ll> typedef long double ld; const ll N = 1e5 + 100, M = 4096 + 10, len = 21, inf = 1e18; const ll mod = 1e9 + 7; vector <pii> q[N]; int mx, cur[N], p[N], sz[N], ans; void dfs(int v, int pred, int sum){ mx = max(mx, sum); for(auto u : q[v]){ if(u.F == pred) continue; dfs(u.F, v, sum + u.S); } } int gt(int x){ if(p[x] == x) return x; return p[x] = gt(p[x]); } void addthem(int a, int b){ a = gt(a); b = gt(b); if(a != b){ if(sz[b] > sz[a]) swap(a, b); sz[a] += sz[b]; p[b] = a; cur[a] = min(cur[a], cur[b]); } } int travelTime(int n, int m, int l, int a[], int b[], int t[]) { for(int i = 0; i < m; i++){ q[a[i]].pb({b[i], t[i]}); q[b[i]].pb({a[i], t[i]}); } for(int i = 1; i <= n; i++){ mx = 0; dfs(i, -1, 0); cur[i] = mx; sz[i] = 1; p[i] = i; ans = max(ans, mx); } for(int i = 1; i <= n; i++){ for(auto u : q[i]){ addthem(u.F, i); } } vector <int> vec; for(int i = 1; i <= n; i++){ if(p[i] == i) vec.pb(cur[i]); } sort(vec.begin(), vec.end()); int ss = (int)vec.size(); if((int)vec.size() >= 2) ans = max(ans, vec[ss - 1] + vec[ss - 2] + l); if((int)vec.size() >= 3) ans = max(ans, vec[ss - 3] + vec[ss - 2] + 2 * l); return ans; } // int main() { // ios::sync_with_stdio(false); // cin.tie(NULL); // 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...