51 nod 1737 配對 貢獻

2021-08-09 02:08:38 字數 1033 閱讀 8255

1737 配對

基準時間限制:1 秒 空間限制:131072 kb 分值: 40 

難度:4級演算法題

給出一棵n個點的樹,將這n個點兩兩配對,求所有可行的方案中配對兩點間的距離的總和最大為多少。

input

乙個數n(1<=n<=100,000,n保證為偶數)

接下來n-1行每行三個數x,y,z表示有一條長度為z的邊連線x和y(0<=z<=1,000,000,000)

output

乙個數表示答案
input示例

6

1 2 1

1 3 1

1 4 1

3 5 1

4 6 1

output示例

7

//配對方案為(1,2)(3,4)(5,6)

解:很容易想到 如果想讓答案盡量大 就要使每條邊 被覆蓋的次數盡量多 就是每條邊對答案的貢獻盡量多 然而每條邊的最大貢獻就是 連線的兩個連通分量的較小值

#include #include #include #include #include using namespace std;

const int n = 1e6+10;

typedef long long ll;

struct node

p[n];

int vis[n], head[n],cnt;

void init()

void add(int u,int v,int w)

ll d[n];

void dfs(int u,int f)

return ;

}ll sum;

ll n;

void dfs2(int u,int f)

return ;

}int main()

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

init();

for(int i=1; i

51nod 1737 樹的重心

思路 樹的重心也叫樹的質心。找到乙個點,其所有的子樹中最大的子樹節點數最少,那麼這個點就是這棵樹的重心,刪去重心後,生成的多棵樹盡可能平衡。考慮每一條邊被統計進答案幾次,若斷開這條邊後樹形成大小為s1 s2的兩個聯通塊則這條邊最多被統計min s1,s2 次。刪去重心後任意同一聯通塊中的兩點不構成路...

51nod 1737 思維 樹重心

思路 對於每一條邊,我們如果想要使得他發揮最大價值,其實就是這條邊被用了 min sonsz u sonsz v 次,那麼我如果找到乙個點使得刪掉這個點之後所有的聯通分支的點的個數都小於等於n 2個點,那麼就可以構造出一種方案使得每條邊被使用min sonsz u sonsz v 次。所以就是找樹的...

51 nod 1491 黃金系統 貢獻

1491 系統 codeforces 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 q 5 12,在 系統下面a0 a1.an 等於 ni 0ai qn i 其中 ai 是0或者1。現在給出兩個 系統下面的數字,請比較他們的大小。input 單組測試資料。第一行...