题目
前置题目
思路
这一题与八中友好教室1差不多,但是题目把"最小"改成了"最大"。
那么很简单,我们只要将每一条边都连一次就行了。
代码
cpp
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct node
{
int u,len;
};
vector<node>vec[1000001];
int ans,zi[1000001],n,x,y,len;
inline 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;}
void dfs(int u,int fa)
{
zi[u] = 1;
for(int i = 0;i < vec[u].size();i++)
if(vec[u][i].u != fa)
{
dfs(vec[u][i].u,u);
zi[u] += zi[vec[u][i].u];
ans += vec[u][i].len * zi[vec[u][i].u];
}
}
signed main()
{
cin>>n;
for(int i = 1;i < n;i++)
{
x = read();
y = read();
len = read();
vec[x].push_back({y,len});
vec[y].push_back({x,len});
}
dfs(1,0);
cout<<ans<<endl;
return 0;
}