時間限制: 1 sec 空間限制: 256 mb
輸入輸出檔名:a.in,a.out
給出一棵以1為根的有n個節點的樹,樹上每條邊都有其邊權。
求所有點對之間的路徑上的邊權和的總和。
第一行為n
接下來n-1行,每行三個整數,分別表示一條邊的兩端點編號和邊權。(編號為1..n)
輸出乙個數字表示總和
1 2 10
2 3 10
1 4 20
1->2:10 , 1->3:20 , 1->4:20 , 2->3:10 , 2->4:30 , 3->4:40 , 總和為130。
對於30%的資料,1<=n<=300
對於80%的資料,1<=n<=3000
對於100%的資料,1<=n<=100000,邊權為<=100的正整數。
這是道套路題qaq
單獨考慮每條路徑就好了
#include#includeview code#include
#define ll long long
using
namespace
std;
const
int m=1e5+7
;int
read()
while(c>='
0'&&c<='9')
return ans*f;
}ll ans,w;
intvis[m],n,x,y,sz[m];
intfirst[m],cnt;
struct nodee[m*2
];void ins(int a,int b,ll w); first[a]=cnt;}
void insert(int a,int
b,ll w)
void dfs(int
x) }
}int
main()
printf(
"%lld\n
",ans);
return0;
}
5055 樹上路徑
給定一顆 n 個結點的無根樹,每個點有乙個點權,定義一條路徑的價值為路徑上的點權和 路徑的點權最大值。給定引數 p,求有多少不同的樹上簡單路徑,滿足它的價值恰好是 p 的倍數。data constraint n 105,p 107 考慮點分治。對於當前的分治重心,把所有以它為起點的路徑取出來,按照路...
題解 樹上路徑
一棵樹的構造過程為 首先以1號點為根,然後依次加入2 n號點。加入i號點時,在1 i 1點中選擇乙個點為f i 將i號點與其相連線。yuri想要求出,每次加點之後路上的最長路徑長度。第一行乙個整數n,表示樹的節點個數。第二行n 1個整數,第i個整數表示f i 1 一行n 1個整數,分別表示加完2 n...
樹上路徑(path)
在 berland,有n 個城堡。每個城堡恰好屬於乙個領主。不同的城堡屬於不同的領主。在所有領主中有乙個是國王,其他的每個領主都直接隸屬於另一位領主,並且間接隸屬於國王。一位領主可以擁有任意數量的下屬。這些城堡被一些雙向的道路連線。兩個城堡是連線的當且僅當他們的主人中一位直接隸屬於另一位。每一年,在...