Submission #1109021

#TimeUsernameProblemLanguageResultExecution timeMemory
1109021doducanhFactories (JOI14_factories)C++14
100 / 100
3233 ms355500 KiB
///breaker #include<bits/stdc++.h> #include "factories.h" using namespace std; #define ll long long #define fi first #define se second #define ii pair<int,int> #define mp make_pair #define in(x) freopen(x,"r",stdin) #define out(x) freopen(x,"w",stdout) #define bit(x,i) ((x>>i)&1) #define lc (id<<1) #define rc ((id<<1)^1) const int maxn=5e5+7; const ll inf=1e18+7; vector<pair<int,ll>>adj[maxn]; int sz[maxn]; bool used[maxn]; int p[25][maxn]; ll minn[maxn]; int h[maxn]; vector<pair<int,ll>>ancestors[maxn]; int dfs(int u,int par) { sz[u]=1; for(ii pp:adj[u]){ int v=pp.fi; 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(ii pp:adj[u]){ int v=pp.fi; int w=pp.se; if(v==par||used[v])continue; dfs2(v,u,cen,depth+w); } } int getcen(int u,int par,int treesize) { for(ii 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)); used[C]=1; dfs2(C,-1,C,0); for(ii pp:adj[C]){ int v=pp.fi; if(v==par||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({B[i],D[i]}); adj[B[i]].push_back({A[i],D[i]}); } buildcen(0,-1); for(int i=0;i<N;i++){ minn[i]=inf; } } 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; } /* stuff you should look for * int overflow, array bounds * special cases (n=1?) * do smth instead of nothing and stay organized * WRITE STUFF DOWN * DON'T GET STUCK ON ONE APPROACH */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...