# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
917506 | coding_snorlax | 자매 도시 (APIO20_swap) | C++14 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
// 精神滿分解
// 可持久化並查集*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的點