제출 #1154806

#제출 시각아이디문제언어결과실행 시간메모리
1154806njoop꿈 (IOI13_dreaming)C++17
18 / 100
30 ms7872 KiB
#include "dreaming.h" #include <bits/stdc++.h> #define ti tuple<int, int, int> using namespace std; vector<pair<int, int>> g[100010]; vector<int> dis; priority_queue<ti, vector<ti>, greater<ti>> pq; int cno, cpa, cdi, nno, ndi, disa[100010], disb[100010], ans; bool vi[100010]; int findMxRoot(int rt) { vector<int> no; int a, b; pq.push({0, rt, -1}); while(pq.size()) { cdi = get<0>(pq.top()); cno = get<1>(pq.top()); cpa = get<2>(pq.top()); pq.pop(); a = cno; vi[cno] = 1; no.push_back(cno); for(auto i: g[cno]) { nno = i.first; ndi = cdi + i.second; if(cpa == nno) continue; pq.push({ndi, nno, cno}); } } pq.push({0, a, -1}); while(pq.size()) { cdi = get<0>(pq.top()); cno = get<1>(pq.top()); cpa = get<2>(pq.top()); pq.pop(); b = cno; disa[cno] = cdi; for(auto i: g[cno]) { nno = i.first; ndi = cdi + i.second; if(cpa == nno) continue; pq.push({ndi, nno, cno}); } } pq.push({0, b, -1}); while(pq.size()) { cdi = get<0>(pq.top()); cno = get<1>(pq.top()); cpa = get<2>(pq.top()); pq.pop(); disb[cno] = cdi; for(auto i: g[cno]) { nno = i.first; ndi = cdi + i.second; if(cpa == nno) continue; pq.push({ndi, nno, cno}); } } int mxrt = 2e9; for(int i: no) { mxrt = min(mxrt, max(disa[i], disb[i])); } return mxrt; } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { for(int i=0; i<M; i++) { g[B[i]].push_back({A[i], T[i]}); g[A[i]].push_back({B[i], T[i]}); } for(int i=0; i<N; i++) { if(!vi[i]) dis.push_back(findMxRoot(i)); } sort(dis.begin(), dis.end()); int sz = dis.size(); if(sz == 1) ans = dis[0]; else if(sz == 2) ans = dis[0] + L + dis[1]; else ans = max(dis[sz-2]+dis[sz-3]+2*L, dis[sz-1]+dis[sz-2]+L); return ans; }
#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...