NOI2011T4 道路修建 樹形DP

2021-07-29 21:00:24 字數 535 閱讀 9828

做法:這個水的程度...不太像noi的難度啊...不妨設點1為根,dfs時順便求出以每個點為根的子樹中點的數量,記為s[i],求完之後回來就可以求出邊的費用了,因為任意一點i只有乙個父親,也只有一條連向父親的邊,所以我們算完乙個點就求出對應的連向父親的邊的費用,顯然cost=c*|s[i]-(n-s[i])|,然後統計總費用即可,注意使用long long。

以下是本人**:

#include #include #include #include #include #define ll long long

int n,first[1000010]=,tot=0;

bool vis[1000010]=;

ll s[1000010],ans=0;

struct edge e[2000010];

void insert(int a,int b,int d)

void treedp(int v)

}int main()

{ scanf("%d",&n);

for(int i=1,a,b,d;i

NOI 2011 道路修建

在 w 星球上有 n 個國家。為了各自國家的經濟發展,他們決定在各個國家 之間建設雙向道路使得國家之間連通。但是每個國家的國王都很吝嗇,他們只願 意修建恰好 n 1 條雙向道路。每條道路的修建都要付出一定的費用,這個費用等於道路長度乘以道路兩端 的國家個數之差的絕對值。例如,在下圖中,虛線所示道路兩...

NOI2011 道路修建

time limit 10 sec memory limit 128 mb submit 3967 solved 1367 submit status discuss 在 w 星球上有 n 個國家。為了各自國家的經濟發展,他們決定在各個國家 之間建設雙向道路使得國家之間連通。但是每個國家的國王都很吝...

NOI2011 道路修建

在 w 星球上有 n 個國家。為了各自國家的經濟發展,他們決定在各個國家 之間建設雙向道路使得國家之間連通。但是每個國家的國王都很吝嗇,他們只願 意修建恰好 n 1 條雙向道路。每條道路的修建都要付出一定的費用,這個費用等於道路長度乘以道路兩端 的國家 個數之差的絕對值。例如,在下圖中,虛線所示道路...