본문 바로가기

Problem Solving/Baekjoon Online Judge (Gold)

백준 23835 - 어떤 우유의 배달목록 (Easy) (C++)

문제

알고리즘 분류

  • 그래프 이론(graphs)
  • 그래프 탐색(graph_traversal)
  • 트리(trees)
  • 깊이 우선 탐색(dfs)

풀이

범위를 보면, $Eazy$ 버전 답게 굉장히 작다.
그냥 쿼리마다 $dfs$를 돌려 $O(QN)$의 복잡도를 가져도 널널해 보인다.

$Hard$ 버전은 딱봐도 $hld$ + 세그먼트 트리일 듯 한데, 구간에 등차수열을 더하는 문제인 이 문제 를 트리 위에서 진행 한다고 생각하면 될 것 같다.

조만간 도전해 봐야지..

전체 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<bits/stdc++.h>
#define N 1001
using namespace std;
 
vector <int> Gr[N];
int n, q, o, i, j, C[N];
 
int f(int p, int q, int c)
{
    int t(p == j ? c : 0);
    for (int x : Gr[p])
        if (!&& x ^ q)
            t = f(x, p, c + 1);
    return t ? (C[p] += t), c - 1 : 0;
}
int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0);
    for (cin >> n; o++ < n - 1;)
        cin >> i >> j, Gr[i].push_back(j), Gr[j].push_back(i);
    for (cin >> q; q--;)
    {
        cin >> o >> i;
        if (o & 1cin >> j, f(i, 00);
        else cout << C[i] << '\n';
    }
}
cs


comment