https://codeforces.com/gym/100551/problem/A 풀어보려고 함. 예제는 나옴
코드는 이거고
어떻게 짠거냐면
먼저 각 간선이 살아있는 시간을 계산함. 첫번째 쿼리 들어오고 나서 생성되서 세번째 쿼리 들어오기 전에 없어지면 lifetime은 1 2 인거지. 시간은 ? 쿼리 기준임
이제 그걸 세그먼트 트리에 업데이트 해뒀음. 세그먼트 트리의 각 노드는 벡터를 하나씩 가지는데, 그 벡터는 그 세그먼트 트리 노드가 나타내는 시간에는 그 간선이 항상 존재한다라는걸 뜻함.
마지막으로 세그먼트 트리를 dfs 해줬음. 각 노드를 타고 내려갈 때마다 그 노드에 포함된 벡터의 모든 노드들을 union 해주고, 리프 노드에 도달하면 component 개수를 출력함. 다시 올라갈 땐 union 해줬던 모든 정점들을 rollback해줌.
이렇게 구현을 했고 답은 맞게 나오는거 같은데 런타임 에러가 뜬다 ㅠㅠ 살려줘
?가 하나도 없는 테케가 있는거아닐까
에이설마
그거 처리하니까 맞네
뭐 이딴 ㅂㅅ같은 문제가 다있지 출력이 없을 수 있다니
그리고 undo에서 ra[b]==ra[a]+1이라고 무조건 ra[b]--하면 안됨
이건 왜 그런지 잘 모르겠는데 혹시 설명해줄수있?
합치기 전에 ra[b]==ra[a]+1였다면 어떻게될까
저격데이터 만드는건 거의 불가능하지만 고쳐주자
ㅇㅋ 땡큐베리감사