| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 917506 | coding_snorlax | 자매 도시 (APIO20_swap) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
// 精神滿分解
// 可持久化並查集*2
// 先將所有權重由小到大排序,之後依次加入第一個並查集,同時記錄並查集中的邊總數(以Boss[flag]紀錄是否超過一條非樹的邊)
// 若增邊操作連接兩個原先相同Boss的集合,且flag=0,則將該並查集中所有邊加入第二個並查集,並統一設定權重為當下的新增邊
// 若增邊操作連接兩個原先相同Boss的集合,且flag=1,忽略該操作
// 若增邊操作連接兩個原先不同Boss的集合,且某個flag=1,另一個為0,則將為0的集合內所有點加入第二個並查集,同時在第一個並查集連接該邊,flag設為1
// 若增邊操作連接兩個原先不同Boss的集合,且flag均為1,則在第二個並查集加入該邊
// 若增邊操作連接兩個原先不同Boss的集合,且flag均為0,則在第一個並查集加入該邊
// 最後利用第二個可持久化並查集查詢每個詢問是在何時連通即可
// 注意:對於第一個並查集,必須知道所有元素,故不可狀態壓縮,且需要反向建邊,使可從Boss做dfs至每個非Boss的點
