CF2002 D1/2
題意描述
給定一棵有根樹和一個排列。每次操作交換排列裡兩個數,每次操作後回答這是否是一個合法的 DFS 序列。
做法
考慮排列裡相鄰兩個數 \((a,b)\),如果 \(a\) 是 \(b\) 的父親,貢獻為 1;如果 \(a\) 在 \(b\) 的父親的子樹內,貢獻也為 1。其他情況貢獻為 0。
容易發現,當總貢獻為 \(n-1\) 的時候,這是個合法的 DFS 序列。
可以 \(O(n+q)\) 維護。
給定一棵有根樹和一個排列。每次操作交換排列裡兩個數,每次操作後回答這是否是一個合法的 DFS 序列。
考慮排列裡相鄰兩個數 \((a,b)\),如果 \(a\) 是 \(b\) 的父親,貢獻為 1;如果 \(a\) 在 \(b\) 的父親的子樹內,貢獻也為 1。其他情況貢獻為 0。
容易發現,當總貢獻為 \(n-1\) 的時候,這是個合法的 DFS 序列。
可以 \(O(n+q)\) 維護。