Submission #1147103

#TimeUsernameProblemLanguageResultExecution timeMemory
1147103LuvidiRoadside Advertisements (NOI17_roadsideadverts)C++20
100 / 100
48 ms23368 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pll pair<ll, ll> #define pii pair<int, int> #define fs first #define sc second #define pb push_back const int maxn=5e4; vector<pii> adj[maxn]; int idx[maxn],d[maxn],t,dp[maxn]; pii sp[2*maxn][20]; void dfs(int v,int p){ idx[v]=t; sp[t++][0]={d[v],v}; for(auto[u,w]:adj[v])if(u!=p){ d[u]=d[v]+1; dp[u]=dp[v]+w; dfs(u,v); sp[t++][0]={d[v],v}; } } int lca(int u,int v){ int x=idx[u],y=idx[v]; if(x>y)swap(x,y); int z=31-__builtin_clz(y-x+1); return min(sp[x][z],sp[y-(1<<z)+1][z]).sc; } int dist(int u,int v){ return dp[u]+dp[v]-2*dp[lca(u,v)]; } void solve() { int n; cin>>n; for(int i=0;i<n-1;i++){ int u,v,w; cin>>u>>v>>w; adj[u].pb({v,w}); adj[v].pb({u,w}); } dfs(0,0); for(int i=1;i<20;i++){ for(int j=0;j+(1<<i)<=t;j++){ sp[j][i]=min(sp[j][i-1],sp[j+(1<<i-1)][i-1]); } } int q; cin>>q; while(q--){ int a[5]; for(int i=0;i<5;i++)cin>>a[i]; sort(a,a+5,[&](int x,int y){return d[x]<d[y];}); int r=lca(a[0],lca(a[1],lca(a[2],lca(a[3],a[4])))); int ans=0; for(int i=0;i<5;i++){ int d=dp[lca(a[i],r)]; for(int j=0;j<i;j++)d=max(d,dp[lca(a[i],a[j])]); ans+=dp[a[i]]-d; } cout<<ans<<'\n'; } } int main() { #ifdef FPO freopen("in","r",stdin); freopen("out","w",stdout); #endif ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...