2015藍橋杯省賽第10題 生命之樹

2021-10-24 20:48:44 字數 1366 閱讀 1216

在x森林裡,上帝建立了生命之樹。

他給每棵樹的每個節點(葉子也稱為乙個節點)上,都標了乙個整數,代表這個點的和諧值。

上帝要在這棵樹內選出乙個非空節點集s,使得對於s中的任意兩個點a,b,都存在乙個點列

\使得這個點列中的每個點都是s裡面的元素,且序列中相鄰兩個點間有一條邊相連。

在這個前提下,上帝要使得s中的點所對應的整數的和盡量大。

這個最大的和就是上帝給生命之樹的評分。

經過的努力,他已經知道了上帝給每棵樹上每個節點上的整數。但是由於不擅長計算,他不知道怎樣有效的求評分。他需要你為他寫乙個程式來計算一棵樹的分數。

51 -2 -3 4 5

4 23 1

1 22 5

思路:樹形dpdp

dp,令d p[

i]

dp[i]

dp[i]以i

ii為根的子樹最大答案。

顯然對於結點u

uu選取子結點為正的dp[

v]

dp[v]

dp[v

]相加轉移即可。

d p[

u]+=

dp[v

](dp

[v

]>0)

dp[u]+=dp[v]\ (dp[v]>0)

dp[u]+

=dp[

v](d

p[v]

>0)

。注意需要初始化ans

=−in

fans=-inf

ans=−i

nf,因為結點的權值可能都為負,這樣答案就是負。

#include

using

namespace std;

typedef

long

long ll;

const

int n=

1e5+

5,m=

2e4+

5,inf=

0x3f3f3f3f

,mod=

1e9+7;

#define pb push_back

ll dp[n]

;int n;

ll ans=

-inf;

vector<

int>e[n]

;void

dfs(

int u,

int fa)

ans=

max(ans,dp[u]);

}int

main()

dfs(1,

0);printf

("%lld\n"

,ans)

;return0;

}

藍橋杯2015省賽B組第2題

2.星系炸彈 在x星系的廣袤空間中漂浮著許多x星人造 炸彈 用來作為宇宙中的路標。每個炸彈都可以設定多少天之後 比如 阿爾法炸彈2015年1月1日放置,定時為15天,則它在2015年1月16日 有乙個貝塔炸彈,2014年11月9日放置,定時為1000天,請你計算它 的準確日期。請填寫該日期,格式為 ...

藍橋杯省賽真題 抽籤

x星球要派出乙個5人組成的觀察團前往w星。其中 a國最多可以派出4人。b國最多可以派出2人。c國最多可以派出2人。那麼最終派往w星的觀察團會有多少種國別的不同組合呢?下面的程式解決了這個問題。陣列a 中既是每個國家可以派出的最多的名額。程式執行結果為 defff cefff cdfff cdeff ...

藍橋杯省賽真題詳解

題目描述 問題描述 小藍給學生們組織了一場考試,捲麵總分為100分,每個學生的得分都是乙個0到100的整數。請計算這次考試的最高分 最低分和平均分。輸入格式 輸入的第一行包含乙個整數n,表示考試人數。接下來n行,每行包含乙個0至100的整數,表示乙個學生的得分。輸出格式 輸出三行。第一行包含乙個整數...