洛谷P3273 SCOI2011 棘手的操作

2021-09-08 04:52:29 字數 2647 閱讀 7705

有n個節點,標號從1到n,這n個節點一開始相互不連通。第i個節點的初始權值為a[i],接下來有如下一些操作:u x y: 加一條邊,連線第x個節點和第y個節點a1 x v: 將第x個節點的權值增加va2 x v: 將第x個節點所在的連通塊的所有節點的權值都增加va3 v: 將所有節點的權值都增加vf1 x: 輸出第x個節點當前的權值f2 x: 輸出第x個節點所在的連通塊中,權值最大的節點的權值f3: 輸出所有節點中,權值最大的節點的權值

輸入格式:

輸入的第一行是乙個整數n,代表節點個數。接下來一行輸入n個整數,a[1], a[2], ..., a[n],代表n個節點的初始權值。再下一行輸入乙個整數q,代表接下來的運算元。最後輸入q行,每行的格式如題目描述所示。

輸出格式:

對於操作f1, f2, f3,輸出對應的結果,每個結果佔一行。

輸入樣例#1: 

複製

3

0 0 0

8a1 3 -20

a1 2 20

u 1 3

a2 1 10

f1 3

f2 3

a3 -10

f3

輸出樣例#1: 

複製

-10

1010

對於30%的資料,保證 n<=100,q<=10000

對於80%的資料,保證 n<=100000,q<=100000

對於100%的資料,保證 n<=300000,q<=300000

對於所有的資料,保證輸入合法,並且 -1000<=v, a[1], a[2], ..., a[n]<=1000

開兩個可並堆堆

分別維護聯通快最大值和所有的最大值

u x y: 加一條邊,連線第x個節點和第y個節點

直接合併

a1 x v: 將第x個節點的權值增加v

先刪掉,再加上原來的權值加v

a2 x v: 將第x個節點所在的連通塊的所有節點的權值都增加v

跟線段樹一樣打個標記

a3 v: 將所有節點的權值都增加v

直接用乙個變數記錄

f1 x: 輸出第x個節點當前的權值

直接輸出

f2 x: 輸出第x個節點所在的連通塊中,權值最大的節點的權值

找到父親,輸出

f3: 輸出所有節點中,權值最大的節點的權值

輸出維護最大值的那個堆的根節點

效率暫時rank1

洛谷P3273 SCOI2011 棘手的操作

有n個節點,標號從1到n,這n個節點一開始相互不連通。第i個節點的初始權值為a i 接下來有如下一些操作 輸入格式 輸入的第一行是乙個整數n,代表節點個數。接下來一行輸入n個整數,a 1 a 2 a n 代表n個節點的初始權值。再下一行輸入乙個整數q,代表接下來的運算元。最後輸入q行,每行的格式如題...

題解 洛谷P3275 SCOI2011 糖果

一道條件非常多的差分約束 把 a b 轉化為 a b le 1 就可做了 a b 的情況同理 若有負環則無解輸出 1 注意本題中要求每個人都有糖果 所以假設乙個源點 d 使 d d ge 1 1 le i le n 另外,本題要求得是最小值 x x le a 的形式求出的是最大值 要轉化成 x x ...

題解 洛谷P3275 SCOI2011 糖果

題面 其實是裸的差分約束吧 qwq。對於每一種情況分類討論一下 這裡說一下差分約束最基本的建圖方式 如何求最值呢?結論 如果求的是最小值,那麼我們就跑一遍最長路 否則就跑一遍最短路。具體的方法就是對於每乙個 x i geq c 的條件,建立乙個超級源點 0 由 0 向 x i 連一條長度為 c 的邊...