Submission #1147092

#TimeUsernameProblemLanguageResultExecution timeMemory
1147092LuvidiRoadside Advertisements (NOI17_roadsideadverts)C++20
47 / 100
1095 ms14052 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],sp[2*maxn][20],d[maxn],t; void dfs(int v,int p){ idx[v]=t; sp[t++][0]=d[v]; for(auto[u,w]:adj[v])if(u!=p){ d[u]=d[v]+1; dfs(u,v); sp[t++][0]=d[v]; } } int dist(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 d[u]+d[v]-2*min(sp[x][z],sp[y-(1<<z)+1][z]); } 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]; int ans=0,d[5][n]; for(int i=0;i<5;i++){ for(int j=0;j<n;j++)d[i][j]=dist(a[i],j); } for(int i=0;i<n;i++){ for(auto[j,w]:adj[i])if(i<j){ bool b=0; for(int x=0;x<5;x++){ for(int y=0;y<5;y++){ b|=d[x][i]+1+d[y][j]==d[x][a[y]]; } } if(b)ans+=w; } } 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...