2021牛客寒假演算法基礎集訓營3 G 糖果

2021-10-19 10:54:24 字數 1800 閱讀 4849

題目鏈結

在乙個幼兒園裡面有 n

\mathit n

n 個小朋友,分別編號 1,2

,...

,n

\text 1,2,...,n

1,2,..

.,n。在這些小朋友中有一些小朋友互為朋友關係,總共有 m

\mathit m

m 對朋友。

作為幼兒園老師,你想買一些糖果分給小朋友,你知道第 i

\mathit i

i 個小朋友想要至少 aia_

ai​ 個糖果,否則他就會不開心。

同時,如果乙個小朋友得到的糖果數小於他某個朋友得到的糖果數,他也會不開心。

請問你最少買多少糖果才能保證每個小朋友都不會不開心呢?

第一行以空格分隔的兩個整數 n,m

\mathit n,m

n,m。

第二行以空格分隔的 n

\mathit n

n 個正整數 aia_

ai​。

接下來 m

\mathit m

m 行每行以空格分隔的兩個正整數 u,v

\mathit u,v

u,vu,v,代表 u

\mathit u

u 是 v

\mathit v

v 的朋友,v

\mathit v

v 是 u

\mathit u

u 的朋友。

1 ≤n

≤106

1\leq n\leq 10^

1≤n≤1060≤

m≤10

60\leq m\leq 10^

0≤m≤1061≤

ai≤1

09

1\leq a_ \leq 10^

1≤ai​≤

1091≤u

,v≤n

,u≠v

1\leq u,v \leq n,u≠v

1≤u,v≤

n,u

​=v購買的最少糖果數以保證每個小朋友都不會不開心。

3 1

1 2 3

1 2

7
dfs~

顯然我們可以根據朋友關係把圖分成很多個連通塊,在每乙個連通塊中,可以求出連通塊中元素的數量 cnt

cntcn

t 和最大糖果數量 a

aa,則最後的答案即為:

a ns

=∑(c

nti∗

ai

)ans=\sum(cnt_i*a_i)

ans=∑(

cnti

​∗ai

​)ac**如下:

#include

using

namespace std;

typedef

long

long ll;

const

int n =

1e6+5;

int n, m, u, v, vis[n]

;vector<

int> g[n]

;ll ans, cnt, mx, a[n]

;void

dfs(

int x)

}int

main()

for(

int i =

1; i <= n; i++)}

printf

("%lld"

, ans)

;return0;

}

2021牛客寒假演算法基礎集訓營3

三場牛客下來覺得自己越來越不在狀態,思路不清晰,一下手就是bug,每調完一題刷下榜都被甩開十里地,罰時慘不忍睹 傳送門 簽到 include using namespace std typedef long long ll const ll inf 0x3f3f3f3f const ll mod 1...

2021牛客寒假演算法基礎集訓營1

題目描述 請你構造乙個非空的括號字串,包含正好 k 個不同合法括號對。所謂括號字串,是指由 和 這兩種字元構成的字串。要求構造的字串長度不超過100000。輸入描述 乙個整數 k。乙個整數 kk。0 k 1e9 輸出描述 乙個僅包含左右括號字串,其中有 kk 個合法的括號對。如果有多種構造方法,輸出...

2021牛客寒假演算法基礎集訓營6

思路 k1排k2前面滿足 k1.a k2.ax k2.b k1.b k1.ax k1.b k2.b k2.ak1.b k2.b k1.a k2.a k1.b include define ull unsigned long long define ll long long const int inf...