-
[알고리즘 연습] 2021년도 10월 넷째주 학습 (D번 문제 풀이)자료구조&알고리즘 2021. 12. 6. 23:08
AtCoder Beginner Contest 223 (D번 문제): topological sort 응용
AtCoder Beginner Contest 223 (F번 문제): segment tree 응용
AtCoder 를 풀다가 공부해두고 싶은 문제가 생겨서 정리해두었다.
1. AtCoder Beginner Contest 223 (D번 문제)
https://atcoder.jp/contests/abc223/tasks/abc223_d
풀이
Indegree 를 활용하는 일반적인 topological sort 코드에 heap push, heap pop 을 추가하기만 하면 된다!
코드
출처: https://atcoder.jp/contests/abc223/submissions/26656807
from heapq import heappush, heappop N, M = map(int, input().split()) graph = defaultdict(list) indegree = defaultdict(int) for _ in range(M): a, b = map(int, input().split()) graph[a].append(b) indegree[b] += 1 result = [] q = [] for key in range(1, N+1): if indegree[key] == 0: heappush(q, key) while q: cur = heappop(q) result.append(cur) for item in graph[cur]: indegree[item] -= 1 if indegree[item] == 0: heappush(q, item) if len(result) == N: print(*result, sep=" ") else: print(-1)
2. AtCoder Beginner Contest 223 (F번 문제)
풀이
본 문제는 segment tree 를 이용하는 문제인데, 해설을 정확하게 이해하지 못하였다. 백준의 문자열과 쿼리 시리즈를 공부하고 나서 풀어보면 좋을 듯하다. (거의 동일한 형태의 문제들이다)
코드
#include <bits/stdc++.h> #include <atcoder/all> using namespace std; using namespace atcoder; pair<int, int> op(pair<int, int> a,pair<int, int> b){ return make_pair(min(a.first, a.second + b.first), a.second + b.second); } pair<int, int> e(){ return make_pair(0, 0); } int main(){ int n, q; cin >> n >> q; string s; cin >> s; vector<pair<int, int>> v(n); for(int i = 0; i < n; i++){ if(s[i] == '(') v[i] = make_pair(0, 1); else v[i] = make_pair(-1, -1); } segtree<pair<int, int>, op, e> seg(v); for(int i = 0; i < q; i++){ int t, l, r; cin >> t >> l >> r; l--; r--; if(t == 1){ swap(v[l], v[r]); seg.set(l, v[l]); seg.set(r, v[r]); } else{ if(seg.prod(l, r + 1) == make_pair(0, 0)) cout << "Yes" << endl; else cout << "No" << endl; } } }
알고리즘 대회_2021_10_Week4.pptx0.42MB반응형'자료구조&알고리즘' 카테고리의 다른 글
[알고리즘 연습] 2021년도 11월 첫째주 학습 (D번 문제 풀이) (0) 2021.12.06 수업 코드 211126 (0) 2021.11.26 수업자료 211126 (0) 2021.11.26 수업 코드 211119 (0) 2021.11.19 수업 내용 211119 (0) 2021.11.19 댓글