CodeForces - 681D Gifts by the List(思维)
生活随笔
收集整理的這篇文章主要介紹了
CodeForces - 681D Gifts by the List(思维)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:點擊查看
題目大意:給出一個 n 個點組成的森林,每條邊都是有向邊,規定一個點的祖先節點也包括了其本身,現在每個人都想要送給其祖先禮物,已知第 i 個人想要送給祖先 a[ i ] 。
要求構造一個序列稱之為 list,現在 n 個人按照順序從 1 ~ n 開始送禮物,規則就是輪到第 i 個人時,他去 list 里找到第一個自己的祖先然后送出去禮物,問是否存在這樣一個序列 list,滿足每個 i 都可以送給 a[ i ] 禮物
題目分析:題意有點難明白的一道題,然后明白題意了也可能不會做的一道題。。
直接說結論吧,如果 a -> b -> c -> d 是一個子孫關系,a 是祖先節點,如果 d 給 a 送禮物,那么 b 和 c 一定也要給 a 送禮物
反證法證明一下,如果 c 給 b 送禮物,那么在 list 里 b 一定在 a 的前面,所以 d 就無法給 a 送禮物了
所以得到了一個小結論就是,每個人要么給自己送禮物,要么和父節點送禮物的對象相同才行
這樣一來只需要按順序保存一下祖先節點即可
代碼:
?
?
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的CodeForces - 681D Gifts by the List(思维)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树形DP求树的最小支配集,最小点覆盖,最
- 下一篇: CodeForces - 1452E T