제출 #1018294

#제출 시각아이디문제언어결과실행 시간메모리
1018294gutzzyTraffic (IOI10_traffic)C++17
50 / 100
322 ms166992 KiB
#include <bits/stdc++.h> #include "traffic.h" using namespace std; vector<int> dp; vector<vector<int>> lst; pair<int,int> ans; int calc(int nodo, int padre, int *p){ if(dp[nodo]!=-1) return dp[nodo]; int res = p[nodo]; for(auto vecino:lst[nodo]){ if(vecino!=padre) res += calc(vecino,nodo,p); } dp[nodo] = res; return dp[nodo]; } void dfs(int nodo, int padre, int *p){ dp[padre] = -1; int res = 0; for(auto vecino:lst[nodo]){ res = max(res, calc(vecino,nodo,p)); } //cout << "arena: " << nodo << " res: " << res << endl; if(res<ans.second){ //cout << "update! new arena: " << nodo << " " << res << endl; ans.second = res; ans.first = nodo; } for(auto vecino:lst[nodo]){ if(vecino!=padre) dfs(vecino,nodo,p); } return; } int LocateCentre(int n, int *p, int *s, int *d){ dp = vector<int>(n,-1); ans.first = 0; ans.second = 2e9; lst = vector<vector<int>>(n,vector<int>()); for(int i=0;i<n-1;i++){ lst[s[i]].push_back(d[i]); lst[d[i]].push_back(s[i]); } dfs(0,0,p); return ans.first; } /* int main(){ cout << LocateCentre(5,{10,10,10,20,20},{0,1,2,3},{2,2,3,4}) << endl; 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...