题解 | #梦想赛道#

梦想赛道

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;
}

全部评论

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
我也曾抱有希望:说的好直白
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务