BOJ 5916 ๋์ฅ ๊ด๋ฆฌ
·160 words·1 min
๐ ๋ฌธ์ ์ ๋ณด # ๋งํฌ: https://www.acmicpc.net/problem/5916 ๐ง ๊ด์ฐฐ ๋ฐ ์ ๊ทผ # ํธ๋ฆฌ๊ฐ ์ฃผ์ด์ง๋ค. ๋ ์ ์ ์ฌ์ด ๊ฒฝ๋ก์ 1์ ๋ํ๋ค. ๋ ์ ์ ์ฌ์ด ๊ฒฝ๋ก์ ๊ฐ์ค์น์ ํฉ์ ๊ณ์ฐํ๋ค. ๋์ด๋ธํ๊ฒ๋ $O(QN)$์ด๊ฒ ์ง๋ง, HLD์ Lazy ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ๋ฅผ ์ด์ฉํด์ $O(Qlog^2N)$์ ๋์ ๊ณ์ฐํ ์ ์์ ๊ฒ ๊ฐ๋ค. ๐ป ํ์ด # ์ฝ๋ (C++): void solve(){ int N, M; cin >> N >> M; Tree tree(N); rep(i, 0, N-1){ int u, v; cin >> u >> v; tree.add_edge(u, v); } tree.build(); LazySegmentTree seg(N+1); while(M--){ char op; cin >> op; int u, v; cin >> u >> v; if(op == 'P'){ vector<pii> segs = tree.hld_path(u, v, false, false); for(auto [L, R]: segs) seg.update(L, R, 1); } else{ ll ans = 0; vector<pii> segs = tree.hld_path(u, v, false, false); for(auto [L, R]: segs) ans += seg.query(L, R); cout << ans << '\n'; } } } ๐ ๊ตฌํ ์ฝ๋ ์ ๊ธ