取max初始值一定要赋成-1
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=100010;
int n,m,tot,head[N],f[N],g[N],ans=-1;
struct edge{int to,next,w;}e[N<<1];
int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int l,r,mid;
multiset<int>s;
multiset<int>::iterator it;
void add_edge(int u,int v,int w)
{
e[++tot].to=v;
e[tot].w=w;
e[tot].next=head[u];
head[u]=tot;
}
void dfs(int u,int fa)
{
for(int i=head[u];i;i=e[i].next)
{
int v=e[i].to;
if(fa==v) continue;
dfs(v,u);
f[u]+=f[v];
}
for(int i=head[u];i;i=e[i].next)
{
int v=e[i].to;
if(fa=