Submission #1210546

#TimeUsernameProblemLanguageResultExecution timeMemory
1210546porquenomedejainiciarsesionTraffic (IOI10_traffic)C++20
100 / 100
588 ms164804 KiB
#include <bits/stdc++.h>
#include "traffic.h"
using namespace std;
vector<vector<int>> adj;
vector<long long> acum;
vector<int> peso;
vector<long long> root;
int realans;
long long ans=100000000000;
void dfs(int cur,int prev){
   for(auto x:adj[cur]){
      if(x!=prev){
         dfs(x,cur);
         acum[cur]+=acum[x];
      }
   }
   acum[cur]+=peso[cur];
}
void dfs2(int cur,int prev){
   if(cur!=0){
      long long jejeje=0;
      for(auto x:adj[cur]){
         if(x!=prev){
            jejeje=max(jejeje,acum[x]);
         }
      }
      jejeje=max(jejeje,acum[0]-acum[cur]);
      if(jejeje<ans){
         realans=cur;
         ans=jejeje;
      }
   }
   for(auto x:adj[cur]){
      if(x!=prev){
         dfs2(x,cur);
      }
   }
}
int LocateCentre(int N, int pp[], int S[], int D[]) {
   adj.resize(N);
   acum.resize(N);
   root.resize(N);
   for(int i=0;i<N;i++){
      peso.push_back(pp[i]);
   }
   for(int i=0;i<N-1;i++){
      adj[S[i]].push_back(D[i]);
      adj[D[i]].push_back(S[i]);
   }  
   dfs(0,-1);
   long long xd=0;
   for(auto x:adj[0]){
      xd=max(xd,acum[x]);
   }
   if(xd<ans){
      realans=0;
      ans=xd;
   }
   root[0]=acum[0];
   dfs2(0,-1);
   return realans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...