题解 | #梦想赛道#
梦想赛道
https://ac.nowcoder.com/acm/contest/11180/A
题目大意
给你一棵树,让你添加一些边,使原树是严格次小生成树,要求添加的边的边权最小
解题思路
要让原树是次小生成树,那么就要构造一棵最小生成树,又因为要边权最小,那么找一条比边权大于1的边,在两个端点之间连一条边权为1的边即可(要保证更小)
如果没有边权大于1的,那就是无解
code
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
ll n,x,y,z,p,sum;
int main()
{
scanf("%lld",&n);
for(ll i=1;i<n;++i){
scanf("%lld%lld%lld",&x,&y,&z);
if(z>1)p=1;
sum+=z;
}
if(!p)puts("-1");
else printf("%lld",sum+1);
return 0;
}