Skip to main content

Lazy_Propagation

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'; } } } πŸ”’ κ΅¬ν˜„ μ½”λ“œ 잠금

BOJ 31055 A Graph Problem

·57 words·1 min
πŸ“ 문제 정보 # 링크: https://www.acmicpc.net/problem/31055 λ²ˆμ—­ 문제 λ²ˆμ—­ # BessieλŠ” μˆ˜ν•™ 지식을 ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ κ·Έλž˜ν”„ 이둠 κ°•μ’Œλ₯Ό μˆ˜κ°•ν•˜κ³  μžˆλŠ”λ°, λ‹€μŒ λ¬Έμ œμ—μ„œ λ§‰ν˜”μŠ΅λ‹ˆλ‹€. κ·Έλ…€λ₯Ό λ„μ™€μ£Όμ„Έμš”! μ—°κ²°λœ 무방ν–₯ κ·Έλž˜ν”„κ°€ μ£Όμ–΄μ§‘λ‹ˆλ‹€. 정점은 $1\dots N$으둜, 간선은 $1\dots M$으둜 λΌλ²¨λ§λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€ ($2\le N\le 2\cdot 10^5$, $N-1\le M\le 4\cdot 10^5$). κ·Έλž˜ν”„μ˜ 각 정점 $v$에 λŒ€ν•΄ λ‹€μŒ 과정을 μˆ˜ν–‰ν•©λ‹ˆλ‹€: