Submission #701486

#TimeUsernameProblemLanguageResultExecution timeMemory
701486sugartheanhSynchronization (JOI13_synchronization)C++14
0 / 100
3553 ms13720 KiB
#include <bits/stdc++.h> using namespace std; #define dbg(x) cerr << #x << ": " << x << endl; #define ii pair<int,int> #define fi first #define se second const int MOD = 1e9 + 7; const int N = 2e5 + 5; int n,m,q,first[N],last[N],d[N],root; vector<ii>p[N]; bool on[N]; void dfs(int x,int u,int R) { for(auto v : p[u]) { if(v.fi == x) continue; if(first[v.se] < R) { dfs(u,v.fi,min(R,last[v.se])); d[u] += d[v.fi]; } } } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin>>n>>m>>q; for(int i = 1;i < n;i++) { int u,v; cin>>u>>v; p[u].push_back(ii(v,i)); p[v].push_back(ii(u,i)); } for(int i = 1;i <= n;i++) first[i] = 1e9; for(int i = 1;i <= m;i++) { int x; cin>>x; if(!on[x]) first[x] = min(first[x], i); else last[x] = max(last[x], i); on[x] ^= 1; } for(int i = 1;i < n;i++) { if(first[i] > last[i]) last[i] = 1e9; // cout<<first[i]<<' '<<last[i]<<'\n'; } // cout<<'\n'; while(q--) { cin>>root; for(int i = 1;i <= n;i++) d[i] = 1; dfs(0,root,1e9); // for(int i = 1;i <= n;i++) // cout<<i<<' '<<d[i]<<'\n'; // cout<<'\n'; cout<<d[root]<<'\n'; } 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...