๋ฌธ์
์ฝ๋
#include <iostream>
#include <vector>
using namespace std;
int N, R, Q;
int max_depth = -1, max_node;
vector<int>graph[100001];
int subnode_cnt[100001];
int dfs(int node, int before){
for(auto next: graph[node]){
if(next != before){
subnode_cnt[node] += dfs(next, node)+1;
}
}
return subnode_cnt[node];
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>N>>R>>Q;
for(int i=0; i<N-1; i++){
int a,b; cin>>a>>b;
graph[a].push_back(b);
graph[b].push_back(a);
}
dfs(R, 0);
for(int i=0; i<Q; i++){
int q; cin>>q;
cout<<subnode_cnt[q]+1<<'\n';
}
}
ํ์ด
ํด๋น ๋ ธ๋๋ฅผ ํฌํจํ์ฌ ์์ ๋ ธ๋์ ๊ฐ์๊ฐ ๋ช ๊ฐ์ธ์ง๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ ๋๋ค.
๋ ธ๋์ ์๊ฐ ๊ต์ฅํ ๋ง๊ธฐ ๋๋ฌธ์ dfs๋ฅผ ํ๋ฒ๋ง ๋์์ ๋ ธ๋์ ๊ฐ์๋ฅผ ํ์ ํด์ผ ํฉ๋๋ค.
ํต์ฌ ๋ก์ง์ subnode_cnt[node] += dfs(next, node)+1; ์ ๋๋ค.
๋ฆฌํ ๋ ธ๋๊น์ง ๋ค์ด๊ฐ ๋ค์ ๋ฃจํธ ๋ ธ๋๋ก ๋์์ค๋ฉด์ ๋ ธ๋์ ๊ฐ์๋ฅผ +1์ฉ ๋ฉ๋ชจ์ด์ ์ด์ ํจ์ผ๋ก์จ ๋จ ํ๋ฒ์ dfs๋ง์ผ๋ก subnode์ ๊ฐฏ์๋ฅผ ํ์ ํ ์ ์์ต๋๋ค.
'Algorithm ๐ง๐ปโ๐ป > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค,c++] 11663๋ฒ - ์ ๋ถ ์์ ์ (0) | 2022.09.06 |
---|---|
[๋ฐฑ์ค,c++] 17136๋ฒ - ์์ข ์ด ๋ถ์ด๊ธฐ (0) | 2022.09.06 |
[๋ฐฑ์ค,c++] 2533๋ฒ - ์ฌํ๋ง ์๋น์ค(SNS) (0) | 2022.09.04 |
[๋ฐฑ์ค,c++] 10775๋ฒ - ๊ณตํญ (0) | 2022.09.02 |
[๋ฐฑ์ค,c++] 4195๋ฒ - ์น๊ตฌ ๋คํธ์ํฌ (0) | 2022.09.02 |
[๋ฐฑ์ค,c++] 18116๋ฒ - ๋ก๋ด ์กฐ๋ฆฝ (0) | 2022.09.02 |
๋๊ธ