Submission #1109018

#TimeUsernameProblemLanguageResultExecution timeMemory
1109018doducanhFactories (JOI14_factories)C++14
100 / 100
3600 ms354536 KiB
#include <bits/stdc++.h> //#include "factories.h" using namespace std; #define ll long long #define fi first #define se second const ll MOD = 1e9 + 7; const ll N = 5e5 + 2; const ll inf = 1e14 + 2; vector<ll> minn(N); vector<int> sz(N), used(N, 0); vector<vector<pair<int, ll>>> adj(N), ancestors(N); int n; int dfs(int u,int par) { sz[u]=1; for(pair<int,ll>pp:adj[u]){ int v=pp.fi; int w=pp.se; if(v==par||used[v])continue; sz[u]+=dfs(v,u); } return sz[u]; } void dfs2(int u,int par,int cen,ll depth) { ancestors[u].push_back({cen,depth}); for(pair<int,ll> pp:adj[u]){ int v=pp.fi; ll w=pp.se; if(v==par||used[v])continue; dfs2(v,u,cen,depth+w); } } int getcen(int u,int par,int treesize) { for(pair<int,ll> pp:adj[u]){ int v=pp.fi; if(v==par||used[v])continue; if((sz[v]<<1)>treesize)return getcen(v,u,treesize); } return u; } void buildcen(int u,int par) { int C=getcen(u,-1,dfs(u,-1)); dfs2(C,-1,C,0); used[C]=1; for(pair<int,ll> pp:adj[C]){ int v=pp.fi; if(used[v])continue; buildcen(v,C); } } void Init(int N, int A[], int B[], int D[]) { for (int i = 0; i < N-1; i++) { adj[A[i]].push_back(make_pair(B[i], D[i])); adj[B[i]].push_back(make_pair(A[i], D[i])); } buildcen(0, -1); } long long Query(int S, int X[], int T, int Y[]) { for(int i=0;i<T;i++){ for(pair<int,long long> y:ancestors[Y[i]]){ minn[y.fi]=inf; } } for(int i=0;i<S;i++){ for(pair<int,ll> y:ancestors[X[i]]){ minn[y.fi]=min(minn[y.fi],y.se); } } ll ans=inf; for(int i=0;i<T;i++){ for(pair<int,ll> y:ancestors[Y[i]]){ ans=min(ans,minn[y.fi]+y.se); } } return ans; }

Compilation message (stderr)

factories.cpp: In function 'int dfs(int, int)':
factories.cpp:21:13: warning: unused variable 'w' [-Wunused-variable]
   21 |         int w=pp.se;
      |             ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...