Submission #1018299

#TimeUsernameProblemLanguageResultExecution timeMemory
1018299gutzzyTraffic (IOI10_traffic)C++17
50 / 100
317 ms166808 KiB
#include <bits/stdc++.h>
#include "traffic.h"
#define ll long long
using namespace std;

vector<ll> dp;
vector<vector<int>> lst;
pair<int,ll> ans;

ll calc(int nodo, int padre, int *p){
    if(dp[nodo]!=-1) return dp[nodo];
    ll 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;
    ll 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<ll>(n,-1);
    ans.first = 0;
    ans.second = 1e18;
    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...