2018計蒜之道初賽第一場 百度科學家(中等)

2021-08-19 22:31:16 字數 3213 閱讀 8029

大科學家有乙個圖書館,所以放書的容量也隨之增加了,圖書館可以看成乙個長度為 nn

n 的序列,一開始裡面放著 nn

n 本書,每本書都記載了乙個特定元素的資訊,書中的元素各不相同。

大科學家會先進行若干次研究,最後進行一次科學實驗,這次實驗需要選取一些元素放在一起來進行。每次研究,大科學家會從圖書館中的某些位置抽出一些書來看,然後得出「如果 xx

x位置上的書對應的元素被拿來做實驗了,那麼區間 [l,r][l,r][l

,r]位置上的書對應的元素也必須拿來做實驗,否則會**」這樣的結論。

大科學家有不止 nn

n 本書(也就是說世界上有不止 nn

n 種元素),但是他自己沒時間給圖書館換書,所以他僱了乙個實習生,這個實習生會時不時地拿出一本從來沒被放入圖書館的書,然後替換掉圖書館中某個位置原來的書(所以對於大科學家得到的兩次看似一樣的研究結果,可能由於圖書館中的書被換了,它們的實質內容可能不一樣)。

每本書還記載著對應元素的非負汙染值,大科學家希望在完成一次科學實驗的前提下(不能不選任何元素),這次實驗的總汙染值最小。作為乙個旁觀者,你能看到科學家做的所有研究結果以及實習生換書的順序,然後你需要告訴大科學家,這個最小總汙染值是多少。

由於大科學家精力有限,所以它只能得出不多的實驗結論(具體參見資料範圍)。

第一行乙個正整數 nn

n,代表圖書館的容量。

接下來一行 nn

n 個數,第 ii

i 個非負整數 aia_iai

​ 代表最開始圖書館中第 ii

i 本書所描述的元素的汙染值。

接下來一行乙個整數 mm

m,代表事件的總數。

接下來 mm

m 行,每行代表乙個事件:

若為 00

0 xx

x yy

y,代表實習生拿了一本新書替換了 xx

x 位置的書,新書對應元素的汙染值為 yyy。

若為 11

1 xx

x ll

l rr

r,代表大科學家得到了新的結果,如果 xx

x 位置的書對應的元素加入了實驗,那麼 [l,r][l,r][l

,r] 區間內的書對應的元素都必須拿來做實驗。

保證大科學家的書籍總數 (n+(n+(n

+ 新書數量 )≤105) \le 10^5)≤

105。

每個元素的汙染值 0≤(ai,y)≤1090 \le (a_i,y) \le 10^90≤

(ai​

,y)≤

109。

保證 1≤x≤n1 \le x \le n1≤

x≤n,1≤l≤r≤n1 \le l \le r \le n1≤

l≤r≤

n,m≤105m \le 10^5m≤

105。

由於大科學家的精力有限,做不了太多的實驗,所以我們保證 ∑(r−l+1)≤105\sum(r-l+1) \le 10^5∑(

r−l+

1)≤1

05。輸出乙個整數,代表最小總汙染值。

一開始書架上有 55

5 本書,我們記這些元素的編號順次為 1,2,3,4,51,2,3,4,51,

2,3,

4,5,他們的汙染值分別為 1,10,100,1000,100001,10,100,1000,100001,

10,1

00,1

000,

1000

0。一共有 44

4 個事件:

大科學家發現,選了元素 11

1 就必須選元素 3,43,43,

4。大科學家發現,選了元素 33

3 就必須選元素 555。

實習生拿了一本新書,我們記這個新元素的編號為 66

6,他的汙染值為 00

0,替換掉現在書架上的第 33

3 本書,現在書架上的 55

5 本書對應元素為 1,2,6,4,51,2,6,4,51,

2,6,

4,5。

大科學家發現,選了元素 66

6(因為它在位置 33

3 上)就必須選元素 1,21,21,

2。於是在所有可能的方案中,單選乙個元素 22

2 來做實驗是總汙染值最小的,因為如果選擇元素 11

1 或元素 66

6,都存在一些繫結關係使得總汙染值不可能比 101010

更小。樣例輸入

5

1 10 100 1000 10000

41 1 3 4

1 3 5 5

0 3 0

1 3 1 2

樣例輸出

10

思路:看成有向圖的話不難發現答案一定在出度為0的子圖里,只是環比較難以解決,tarjan縮點演算法可以有效計算強連通分量,即縮圈成點,藍書上有介紹,強連通分量。

#include#include#include#include#include#include#include#define maxn  100000+100

typedef long long ll;

using namespace std;

const ll inf=1e15+7;

ll value[maxn];

int book[maxn];

vectorg[maxn];

stacksta;

stackcopy;

int pre[maxn];

int low_link[maxn];

int scc[maxn];

int dfs_cnt,scc_cnt;

ll result=inf;

void dfs(int now)

else

if(!scc[v])

low_link[now]=min(low_link[now],pre[v]);

} if(low_link[now]==pre[now])

if(!flag)

result=min(result,sum); }}

void find_scc(int n)

int main()

else

}find_scc(n);

printf("%lld\n",result);

return 0;

}

2018 計蒜之道 初賽第一場 A 百度無人車

i i kg。現在希望你設計一種最優的減重方案,使得最重的車輛的重量是所有減重方案中最小的。任何時候,每輛車的重量必須大於等於1 kg。並且減重方案只能減輕整數kg。輸入格式 接下來一行輸入 n 個整數,其中第 i 個整數 a i i 表示第 i 輛車的重量。保證1 n 20000,1 a 2000...

2018 計蒜之道 初賽 第一場

題解 典型的二分 1 pragma warning disable 4996 2 include3 include4 include 5 include6 include7 include8 include9 define ll long long 10using namespace std 111...

2017 計蒜之道 初賽 第一場

阿里的新遊戲 阿里九遊開放平台近日上架了一款新的益智類遊戲 成三棋。成三棋是我國非常古老的乙個雙人棋類遊戲,其棋盤如下圖所示 如果一條線段上的三個交叉點都被同一玩家的棋子佔據的話,則稱這條線段被該玩家成三。現在,小紅和小明兩人在遊戲平台上下棋,其中小紅的棋子是黑色的。請你幫小紅計算他成三的線段數。樣...