Codeforces Round #588 (Div. 2) F. Konrad and Company Evaluation 图论 + 建反图 好题
生活随笔
收集整理的這篇文章主要介紹了
Codeforces Round #588 (Div. 2) F. Konrad and Company Evaluation 图论 + 建反图 好题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
傳送門
文章目錄
- 題意:
- 思路:
題意:
給你一張nnn個點mmm條邊的圖,其中每個點iii初始編號為iii,邊是有向的,方向為從編號大的指向編號小的。定義一個貢獻為存在某三個點a,b,ca,b,ca,b,c有兩條邊為a?>b,b?>ca->b,b->ca?>b,b?>c,這個時候貢獻為111。有qqq個詢問,每次給出一個點xxx,代表將xxx的編號變成最大。對于每次詢問輸出當前圖的貢獻。
思路:
首先需要知道如何快速的算出貢獻來。通過觀察不難發現,bbb作為一個中間點,他的in[b]?out[b]in[b]*out[b]in[b]?out[b]就是bbb作為中間點的貢獻。對于每個iii求出來in[i]?out[i]in[i]*out[i]in[i]?out[i]即為初始的貢獻。
考慮對于每次修改,我們如果能快速的找到當前查詢的點xxx的入邊,那么問題就好解決了。
我們可以重新開一個數組來記錄下來,但是實際上并沒有必要,我們發現直接將原圖建反邊,讓后直接跑當前點的出邊,這樣就避免了刪除操作,非常巧妙。
這樣的時間復雜度也是正確的,題解有證明,比較長就不多說啦。
復雜度O(qm)O(q\sqrt{m})O(qm?)
總結
以上是生活随笔為你收集整理的Codeforces Round #588 (Div. 2) F. Konrad and Company Evaluation 图论 + 建反图 好题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux Ftrace介绍与原理
- 下一篇: Codeforces Round #73