제출 #1288951

#제출 시각아이디문제언어결과실행 시간메모리
1288951VicBVic동기화 (JOI13_synchronization)C++20
0 / 100
46 ms11212 KiB
#include <bits/stdc++.h> using namespace std; //#define TESTS #define x first #define y second #define pii pair<int,int> #define veci vector<int> #define vecp vector<pii> #define all(x) x.begin(), x.end() #define pb(x,y) x.push_back(y) const int maxn = 1e5+5; int n,m,q; int muc[maxn]; bool active[maxn]; int a[maxn], b[maxn]; int tst[maxn], tdr[maxn]; veci adj[maxn]; int vget(int nod, int i) { return a[i]==nod ? b[i] : a[i]; } int ans=0; void dfs(int nod,int tata) { //cerr<<"HERE "<<nod<<' '<<tata<<' '<<tst[muc[nod]]<<' '<<tdr[muc[tata]]<<'\n'; if(tata!=0&&muc[tata]!=0) { if(tst[muc[nod]]>tdr[muc[tata]]) return; } ans++; for(auto e:adj[nod]) { int next=vget(nod,e); if(next==tata) continue; muc[next]=e; dfs(next,nod); } } void solve() { cin>>n>>m>>q; //assert(q==1); for(int i=1;i<n;i++) { cin>>a[i]>>b[i]; adj[a[i]].push_back(i); adj[b[i]].push_back(i); tst[i]=m+1; tdr[i]=0; } for(int i=1;i<=m;i++) { int nr; cin>>nr; if(!active[nr]) { tst[nr]=min(tst[nr], i); tdr[nr]=m+100; active[nr]=1; } else { tdr[nr]=i; active[nr]=0; } } /*for(int i=1;i<n;i++) { cout<<tst[i]<<','<<tdr[i]<<'\n'; }*/ for(int i=1;i<=q;i++) { ans=0; int root; cin>>root; muc[root]=0; dfs(root, 0); //cerr<<'\n'; cout<<ans<<'\n'; } } int main() { cin.tie(0); cout.tie(0); ios::sync_with_stdio(0); int t=1; #ifdef TESTS cin>>t; #endif while(t--) { solve(); } 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...