有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輸出樣例#1:0 0 0
8a1 3 -20
a1 2 20
u 1 3
a2 1 10
f1 3
f2 3
a3 -10
f3
複製
-10對於30%的資料,保證 n<=100,q<=100001010
對於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 的邊...