此博文長期更新
第一題 網絡流
- 源於poj 1659,這道題解法是Havel-Hakimi定理
- 我出的題目
- 一個有向圖,已知各點的初度和入度,目標是還原整幅圖
- 解法是:
- 拆點,從源點向1-N建邊,流的大小爲入度,各點向1’-N’建邊,流的大小爲1,1’ - N’向匯點建邊流的大小爲出度,求解最大流
- 如果 最大流等於出度和(出度和==入度和)那麼此圖可解,然後從各點找到拆點的邊,如果流爲1那麼有一條邊,由此解出整幅圖
第二題 樹狀數組,離散化
- 源於hdu 4288 , 這題的解法是線段樹,區間合併
- 我出的題目
- 題意:給 一個隊列,隊列裏的元素大小是唯一的,然後給三個操作:
- 刪除隊列你值爲x的元素
- 在隊列末尾添加值爲y的元素
- 求值爲z的元素在隊列中的位置
- 解法:
- 離線處理,離散化所有的值
- 建一個樹狀數組, size表示隊列的大小
- 對於添加操作,從前往後處理數據,對於每一個元素的離散值,把這個離散值映射到樹狀數組size的位置,size之後加1
- 對於刪除操作,把該元素在樹狀數組的映射值更新爲0
- 對於 查找操作,把該元素在樹狀數組的映射值,向前求和即可
- 題意:給 一個隊列,隊列裏的元素大小是唯一的,然後給三個操作:
第三題 線段樹,樹上染色
- 源於fzu2176,
- 我出的題目
- 題意:給一有n個節點的樹,開始沒有顏色,以1爲根,然後2個操作
- 把以x爲根的樹的所有節點(或邊)染成x
- 詢問以y爲根的樹被染成了多少種不同的顏色
- 解法:
- 先一次dfs,把所有的點映射到線段樹上,同時記錄下各個根節點爲樹的區間
- 然後hash一下顏色,更新一下區間即可
- 提高難度:
- 把詢問改成從a節點到b節點有多少段顏色,就比較噁心了,代碼複雜度太高
- 題意:給一有n個節點的樹,開始沒有顏色,以1爲根,然後2個操作