제출 #1228478

#제출 시각아이디문제언어결과실행 시간메모리
1228478denislav동기화 (JOI13_synchronization)C++20
40 / 100
8087 ms22288 KiB
# include <iostream> # include <vector> using namespace std; const int MAX=2e5+11; int n,m,q; vector<pair<int,int>> adj[MAX]; vector<pair<int,int>> alive[MAX]; int ans; void dfs(int curr, int par, int tm) { ans++; for(pair<int,int>& p: adj[curr]) { int nxt=p.first,id=p.second; if(nxt==par) continue; int bst=m+1; for(pair<int,int> pa: alive[id]) { if(pa.first<=tm) bst=min(pa.second,tm); } if(bst<=tm) dfs(nxt,curr,bst); } } int main() { ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>n>>m>>q; for(int i=1;i<n;i++) { int u,v; cin>>u>>v; adj[u].push_back({v,i}); adj[v].push_back({u,i}); } for(int i=1;i<=m;i++) { int x; cin>>x; if((int)alive[x].size()>0 and alive[x].back().second==-1) alive[x][alive[x].size()-1].second=i; else alive[x].push_back({i,-1}); } for(int i=1;i<n;i++) if((int)alive[i].size()>0 and alive[i].back().second==-1) alive[i][alive[i].size()-1].second=m; while(q--) { int x; cin>>x; ans=0; dfs(x,-1,m); cout<<ans<<"\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...