Submission #545176

#TimeUsernameProblemLanguageResultExecution timeMemory
545176MilosMilutinovicSynchronization (JOI13_synchronization)C++14
100 / 100
293 ms25008 KiB
#include<bits/stdc++.h> #define fi first #define se second #define pb push_back #define mp make_pair using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> pll; template<typename T> bool chkmin(T&x,T y){return x>y?x=y,1:0;} template<typename T> bool chkmax(T&x,T y){return x<y?x=y,1:0;} int readint(){ int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int n,m,q,x[200005],y[200005],ans[100005],dep[100005],dfn[100005],dfo[100005],T,fnw[200005],f[100005][20],snc[100005]; vector<int> adj[100005]; bool act[200005]; void dfs(int u,int p){ dfn[u]=++T,ans[u]=1,dep[u]=dep[p]+1,f[u][0]=p; for(int i=1;i<20;i++) f[u][i]=f[f[u][i-1]][i-1]; for(int v:adj[u]) if(v!=p) dfs(v,u); dfo[u]=++T; } void modify(int x,int v){ for(;x<200005;x+=x&-x) fnw[x]+=v; } int query(int x){ int s=0; for(;x>0;x-=x&-x) s+=fnw[x]; return s; } int getf(int x){ int r=x; for(int i=19;i>=0;i--) if(f[r][i]&&query(dfn[f[r][i]])==query(dfn[x])) r=f[r][i]; return r; } int main(){ n=readint(); m=readint(); q=readint(); for(int i=1;i<n;i++){ x[i]=readint(); y[i]=readint(); adj[x[i]].pb(y[i]); adj[y[i]].pb(x[i]); } dfs(1,0); for(int i=1;i<=n;i++) modify(dfn[i],1),modify(dfo[i],-1); while(m--){ int i=readint(); if(dep[x[i]]>dep[y[i]])swap(x[i],y[i]); if(act[i]){ ans[y[i]]=snc[y[i]]=ans[getf(x[i])]; modify(dfn[y[i]],1); modify(dfo[y[i]],-1); }else{ ans[getf(x[i])]+=ans[y[i]]-snc[y[i]]; modify(dfn[y[i]],-1); modify(dfo[y[i]],1); } act[i]=!act[i]; } while(q--)printf("%d\n",ans[getf(readint())]); 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...
#Verdict Execution timeMemoryGrader output
Fetching results...