#include<cstdio>#include<vector>#include<cstring>#include<algorithm>usingnamespace std;#define MAXN 500005#define ll long longstruct node {int v, w;node(){}node(int V,int W ){
v = V, w = W;}};
vector < node > G[MAXN];int T, n, k;
ll dp[MAXN][2];boolcmp(int x,int y ){return x > y;}voiddfs(int u,int fa ){
vector < ll > p;for(int i =0;i < G[u].size();i ++){int v = G[u][i].v, w = G[u][i].w;if( v == fa )continue;dfs( v, u );
dp[u][1]+= dp[v][0];
dp[u][0]+= dp[v][0];
p.push_back( dp[v][1]+ w - dp[v][0]);}sort( p.begin(), p.end(), cmp );for(int i =0;i < p.size()&& i < k;i ++){if( p[i]<=0)return;if( i < k -1) dp[u][1]+= p[i];
dp[u][0]+= p[i];}}intmain(){scanf("%d",&T );while( T --){scanf("%d %d",&n,&k );for(int i =1;i <= n;i ++)
G[i].clear(), dp[i][0]= dp[i][1]=0;for(int i =1, u, v, w;i < n;i ++){scanf("%d %d %d",&u,&v,&w );
G[u].push_back(node( v, w ));
G[v].push_back(node( u, w ));}dfs(1,0);printf("%lld\n", dp[1][0]);}return0;}
#include<cstdio>#include<vector>#include<algorithm>usingnamespace std;#define ll long long#define MAXN 100005#define Pair pair < ll, ll >
vector <int> G[MAXN];int n, s;
ll k[MAXN], dp[MAXN];boolcmp(int x,int y ){return x > y;}
Pair dfs(int u,int fa ){
vector < ll > p;bool flag =0;
ll last =0;for(int i =0;i < G[u].size();i ++){int v = G[u][i];if( v == fa )continue;
flag =1;
Pair son =dfs( v, u );
last += son.second;
p.push_back( son.first );}if(! flag )returnmake_pair(0, k[u]-1);sort( p.begin(), p.end(), cmp );
ll tot =0;
k[u]-=( u != s );for(int i =0;i < p.size()&& k[u];i ++, k[u]--)
tot += p[i]+2;
tot +=(min( last, k[u])<<1);
k[u]-=min( last, k[u]);returnmake_pair( tot, k[u]);}intmain(){scanf("%d",&n );for(int i =1;i <= n;i ++)scanf("%lld",&k[i]);for(int i =1, u, v;i < n;i ++){scanf("%d %d",&u,&v );
G[u].push_back( v );
G[v].push_back( u );}scanf("%d",&s );
Pair ans =dfs( s,-1);printf("%lld", ans.first );return0;}
#include<cstdio>#include<vector>usingnamespace std;#define MAXN 200005struct node {int v, w;node(){}node(int V,int W ){
v = V, w = W;}};
vector < node > G[MAXN];int n, ans;int c[MAXN], dp[MAXN];voiddfs(int u,int fa ){for(int i =0;i < G[u].size();i ++){int v = G[u][i].v, w = G[u][i].w;if( v == fa )continue;dfs( v, u );
ans =max( ans, dp[u]+ dp[v]+ w );
dp[u]=max( dp[u], dp[v]+ w );}}intmain(){scanf("%d",&n );for(int i =1;i <= n;i ++)scanf("%d",&c[i]);for(int i =1, u, v;i < n;i ++){scanf("%d %d",&u,&v );int color =( c[u]!= c[v]);
G[u].push_back(node( v, color ));
G[v].push_back(node( u, color ));}dfs(1,0);printf("%d",( ans +1)>>1);return0;}
#include<cstdio>#include<vector>#include<iostream>usingnamespace std;#define MAXN 205
vector <int> G[MAXN];int n, k;int a[MAXN];int dp[MAXN][MAXN];voiddfs(int u,int fa ){
dp[u][0]= a[u];for(int i =0;i < G[u].size();i ++){int v = G[u][i];if( v == fa )continue;dfs( v, u );}for(int dep =0;dep < MAXN;dep ++){if(! dep ){for(int i =0;i < G[u].size();i ++){int v = G[u][i];if( v == fa )continue;
dp[u][dep]+= dp[v][max( k -1- dep,0)];}}else{int temp =0, ans =0;for(int i =0;i < G[u].size();i ++){int v = G[u][i];if( v == fa )continue;
temp += dp[v][max( dep -1, k - dep -1)];}for(int i =0;i < G[u].size();i ++){int v = G[u][i];if( v == fa )continue;
ans =max( ans, temp - dp[v][max( dep -1, k -1- dep )]+ dp[v][dep -1]);}
dp[u][dep]=max( dp[u][dep], ans );}}for(int i = MAXN -1;i;i --)
dp[u][i -1]=max( dp[u][i], dp[u][i -1]);}intmain(){scanf("%d %d",&n,&k ); k ++;for(int i =1;i <= n;i ++)scanf("%d",&a[i]);for(int i =1, u, v;i < n;i ++){scanf("%d %d",&u,&v );
G[u].push_back( v );
G[v].push_back( u );}dfs(1,0);printf("%d", dp[1][0]);return0;}
#include<cstdio>#include<vector>#include<cstring>#include<iostream>#include<algorithm>usingnamespace std;#define MAXN 6005
vector <int> G[MAXN];int n, ans;int w[MAXN], dp[MAXN];voiddfs(int u,int fa ){int pos =lower_bound( dp +1, dp + n +1, w[u])- dp;
ans =max( ans, pos );int temp = dp[pos];
dp[pos]= w[u];for(int i =0;i < G[u].size();i ++){int v = G[u][i];if( v == fa )continue;dfs( v, u );}
dp[pos]= temp;}intmain(){scanf("%d",&n );for(int i =1;i <= n;i ++)scanf("%d",&w[i]);for(int i =1, u, v;i < n;i ++){scanf("%d %d",&u,&v );
G[u].push_back( v );
G[v].push_back( u );}memset( dp,0x7f,sizeof( dp ));for(int i =1;i <= n;i ++)dfs( i,0);printf("%d", ans );return0;}
#include<queue>#include<cstdio>#include<vector>usingnamespace std;#define MAXN 200005#define mod 1000000007#define ll long long
vector <int> G[MAXN];int n;
ll ans;
ll a[MAXN], fa[MAXN], siz[MAXN], f[MAXN], g[MAXN], uf[MAXN], ug[MAXN];voiddfs(int u ){
f[u]= siz[u]=1;for(int i =0;i < G[u].size();i ++){int v = G[u][i];if( v == fa[u])continue;
fa[v]= u,dfs( v );
siz[u]+= siz[v], f[u]+= g[v], g[u]+= f[v];}
ans =( ans +( f[u]- g[u])*( n - siz[u]+1)% mod * a[u]% mod )% mod;
ans =( ans +( siz[u]-1)* a[u]% mod )% mod;for(int i =0;i < G[u].size();i ++){int v = G[u][i];if( v == fa[u])continue;
ans =( ans +( g[v]- f[v])*( siz[u]- siz[v]-1)% mod * a[u]% mod )% mod;}}voidbfs(){
queue <int> q;for(int i =0;i < G[1].size();i ++)
q.push( G[1][i]);while(! q.empty()){int u = q.front(); q.pop();
uf[u]= ug[fa[u]]+ g[fa[u]]- f[u];
ug[u]= uf[fa[u]]+ f[fa[u]]- g[u];
ans =( ans +( uf[u]- ug[u])* siz[u]% mod * a[u]% mod )% mod;for(int i =0;i < G[u].size();i ++){int v = G[u][i];if( v == fa[u])continue;
q.push( v );}}}intmain(){scanf("%d",&n );for(int i =1;i <= n;i ++)scanf("%lld",&a[i]);for(int i =1, u, v;i < n;i ++){scanf("%d %d",&u,&v );
G[u].push_back( v );
G[v].push_back( u );}dfs(1);bfs();printf("%lld",( ans + mod )% mod );return0;}
#include<cstdio>#include<vector>#include<algorithm>usingnamespace std;#define MAXN 100005#define ll long longstruct edge {int v, w;edge(){}edge(int V,int W ){
v = V, w = W;}};struct node {
ll x, y, z;node(){}node( ll X, ll Y, ll Z ){
x = X, y = Y, z = Z;}}p[MAXN];
vector < edge > G[MAXN];int n;
ll f1[MAXN], f2[MAXN], Size[MAXN];boolcmp( node u, node v ){return v.x * u.y < u.x * v.y;}voiddfs(int u,int fa ){
Size[u]++;for(int i =0;i < G[u].size();i ++){int v = G[u][i].v;if( v == fa )continue;dfs( v, u );
Size[u]+= Size[v], f1[u]+= f1[v];}int len =0;for(int i =0;i < G[u].size();i ++){int v = G[u][i].v, w = G[u][i].w;if( v == fa )continue;
p[++ len]=node( Size[v], f2[v]+( w <<1), w );}sort( p +1, p + len +1, cmp );for(int i =1;i <= len;i ++)
f1[u]+=( p[i].z + f2[u])* p[i].x, f2[u]+= p[i].y;}intmain(){scanf("%d",&n );for(int i =1, u, v, w;i < n;i ++){scanf("%d %d %d",&u,&v,&w );
G[u].push_back(edge( v, w ));
G[v].push_back(edge( u, w ));}dfs(1,0);printf("%.8f", f1[1]*1.0/( n -1));return0;}
#include<cstdio>#include<vector>#include<iostream>usingnamespace std;#define ll long long#define MAXN 100005
vector <int> G[MAXN];int n, m;
ll dep[MAXN], siz[MAXN], f[MAXN][20], sum[MAXN], tot[MAXN];voiddfs1(int u,int fa ){
siz[u]=1, dep[u]= sum[u]= dep[fa]+1, f[u][0]= fa;for(int i =0;i < G[u].size();i ++){int v = G[u][i];if( v == fa )continue;dfs1( v, u ), sum[u]+= sum[v], siz[u]+= siz[v];}}voiddfs2(int u ){int fa = f[u][0];if( fa ){
tot[u]= tot[fa]+ sum[fa]- sum[u];
tot[u]-=(( siz[fa]- siz[u])* dep[fa])<<1;}for(int i =0;i < G[u].size();i ++)if( G[u][i]!= fa )dfs2( G[u][i]);}intjump(int x,int s ){for(int i =0;i <18;i ++)if((1<< i )& s ) x = f[x][i];return x;}intLCA(int x,int y ){if( dep[x]< dep[y])swap( x, y );
x =jump( x, dep[x]- dep[y]);if( x == y )return x;for(int i =17;~ i;i --)if( f[x][i]!= f[y][i]) x = f[x][i], y = f[y][i];return f[x][0];}intmain(){scanf("%d %d",&n,&m );for(int i =1, u, v;i < n;i ++){scanf("%d %d",&u,&v );
G[u].push_back( v );
G[v].push_back( u );}dfs1(1,0),dfs2(1);for(int j =1;j <18;j ++)for(int i =1;i <= n;i ++)
f[i][j]= f[f[i][j -1]][j -1];for(int i =1, u, v;i <= m;i ++){scanf("%d %d",&u,&v );if( dep[u]> dep[v])swap( u, v );int lca =LCA( u, v );
ll ans =0, all =0;if( lca == u ){int son =jump( v, dep[v]- dep[u]-1);
all = siz[v]*( siz[1]- siz[son]);
ans +=( sum[v]- dep[v]* siz[v])*( siz[1]- siz[son]);
ans +=( dep[v]- dep[u])* all;
ans += all;
ans += siz[v]* dep[u]*( siz[1]- siz[son])+ tot[son]* siz[v];}else{
all = siz[u]* siz[v];
ans += siz[u]*( sum[v]- dep[v]* siz[v]);
ans += siz[v]*( sum[u]- siz[u]* dep[u]);
ans += all *( dep[u]+ dep[v]-( dep[lca]<<1)+1);}printf("%.8f\n", ans *1.0/ all );}return0;}
#include<cstdio>#include<vector>#include<iostream>usingnamespace std;#define MAXN 300005#define mod 998244353#define ll long long
vector <int> G[MAXN];int n;
ll dp[MAXN][3], g[3];//0-合法//1-非法//2-孤 voiddfs(int u,int fa ){
dp[u][2]=1;for(int i =0;i < G[u].size();i ++){int v = G[u][i];if( v == fa )continue;dfs( v, u );
g[0]=(( dp[v][2]+ dp[v][1])% mod * dp[u][2]% mod
+( dp[v][2]+ dp[v][1])% mod * dp[u][1]% mod
+( dp[v][2]+( dp[v][0]<<1))% mod * dp[u][0]% mod )% mod;
g[1]=( dp[v][0]* dp[u][2]% mod +( dp[v][2]+( dp[v][0]<<1))% mod * dp[u][1]% mod )% mod;
g[2]=( dp[v][0]+ dp[v][2])% mod * dp[u][2]% mod;swap( dp[u], g );}}intmain(){scanf("%d",&n );for(int i =1, u, v;i < n;i ++){scanf("%d %d",&u,&v );
G[u].push_back( v );
G[v].push_back( u );}dfs(1,0);printf("%lld\n",( dp[1][0]+ dp[1][2])% mod );return0;}