제출 #1178255

#제출 시각아이디문제언어결과실행 시간메모리
1178255AlgorithmWarrior동기화 (JOI13_synchronization)C++20
30 / 100
91 ms15944 KiB
#include <bits/stdc++.h> using namespace std; int const MAX=100005; struct edge{ int nod,id; }; vector<edge>tree[MAX]; int n,m,q; vector<int>pos[MAX]; int dp[MAX]; int root; int rasp; void read(){ cin>>n>>m>>q; int i; for(i=1;i<n;++i){ int u,v; cin>>u>>v; tree[u].push_back({v,i}); tree[v].push_back({u,i}); } for(i=1;i<=m;++i){ int muchie; cin>>muchie; pos[muchie].push_back(i); } cin>>root; } void dfs(int nod,int tata,int id_edge){ if(nod==root) dp[nod]=m; else{ int ind=upper_bound(pos[id_edge].begin(),pos[id_edge].end(),dp[tata])-pos[id_edge].begin(); if(ind){ if(ind%2==0) dp[nod]=pos[id_edge][ind-1]-1; else dp[nod]=dp[tata]; } } if(dp[nod]) ++rasp; for(auto [fiu,id] : tree[nod]) if(fiu!=tata) dfs(fiu,nod,id); } int main() { read(); dfs(root,0,0); cout<<rasp; 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...