博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
「洛谷P3931」 SAC E#1 - 一道难题 Tree
阅读量:7107 次
发布时间:2019-06-28

本文共 1663 字,大约阅读时间需要 5 分钟。

题目背景

冴月麟和魏潇承是好朋友。

题目描述

冴月麟为了守护幻想乡,而制造了幻想乡的倒影,将真实的幻想乡封印了。任何人都无法进入真实的幻想乡了,但是她给前来救她的魏潇承留了一个线索。

她设置了一棵树(有根)。树的每一条边上具有割掉该边的代价。

魏潇承需要计算出割开这棵树的最小代价,这就是冴月麟和魏潇承约定的小秘密。

帮帮魏潇承吧。

注:所谓割开一棵有根树,就是删除若干条边,使得任何任何叶子节点和根节点不连通。

输入输出格式

输入格式:

输入第一行两个整数n,S表示树的节点个数和根。

接下来n-1行每行三个整数a、b、c,表示a、b之间有一条代价为c的边。

输出格式:

输出包含一行,一个整数,表示所求最小代价。

输入输出样例

输入样例#1:

4 11 2 1 1 3 11 4 1

输出样例#1:

3

输入样例#2:

4 11 2 32 3 13 4 2

输出样例#2:

1

说明

对于20%的数据,n <= 10

对于50%的数据,n <= 1000

对于100%的数据,n <= 100000


写在前面

lovny(YKJ):用树形DP呀?

Venus(LYT):还在做网络流?

。。。

没必要!完全没必要!这道题DFS就够了!

思路

很明显,要使一个叶子节点到不了祖先,有两种选择:

他的某个祖先到不了根节点

它父亲->它 删了

然后我们可以遍历一遍树。

DFS( x, fa ) = \(\Sigma\)min(DFS( i, x ) ( 存在边x->i), val(x->i) )

fa是为了避免搜到父亲节点。

若x为叶子节点,直接返回INF

也就是说,要么断开x->i让i到不了根节点,下面就不用再删边了,要么让i到的了根节点,在下面某处再断开。

他没说c的范围,保险起见开long long

代码很短。。。真的很短。。。

代码

#include
using namespace std;#define open(s) freopen( s".in", "r", stdin ), freopen( s".out", "w", stdout )#define MAXN 100005#define MAXM 200005#define LL long longint n, S;int hd[MAXN], to[MAXM], nxt[MAXM], tot(1);LL val[MAXM];void Add( int x, int y, int z ){ nxt[++tot] = hd[x]; hd[x] = tot; val[tot] = z; to[tot] = y; nxt[++tot] = hd[y]; hd[y] = tot; val[tot] = z; to[tot] = x;}LL DFS( int x, int fa ){ LL ans(0); bool flg(0); for ( int i = hd[x]; i; i = nxt[i] ) if ( to[i] != fa ) ans += min( DFS( to[i], x ), val[i] ), flg = 1; if ( !flg ) return LONG_LONG_MAX; return ans;}int main(){ scanf( "%d%d", &n, &S ); for ( int i = 1; i < n; ++i ){ int x, y; LL z; scanf( "%d%d%lld", &x, &y, &z ); Add( x, y, z ); } printf( "%lld\n", DFS( S, S ) ); return 0;}

转载于:https://www.cnblogs.com/louhancheng/p/10139191.html

你可能感兴趣的文章
Python获取二维数组的行列数
查看>>
使用canvas绘制扇形图
查看>>
Gradle安装使用以及基本操作
查看>>
VM_Centos7.3_X64_安装Oracle12C 总结笔记
查看>>
JS JSOP跨域请求实例详解
查看>>
java反射--方法反射的基本操作
查看>>
协方差矩阵
查看>>
创建与合并分支【转】
查看>>
爬取本blog的所有标题和链接
查看>>
普通用户使用的命令-系统信息查看类命令
查看>>
【转】一次SpringMVC+ Mybatis 配置多数据源经历
查看>>
exception is the version of xbean.jar correct
查看>>
Hibernate demo之使用注解
查看>>
.NET Core 实现定时抓取博客园首页文章信息并发送到邮箱
查看>>
CSDN日报20170416 ——《为什么程序猿话少钱多死得早?》
查看>>
Retrofit网络框架入门使用
查看>>
Oracle-PLSQL提示“记录被另一个用户锁住”
查看>>
GetBulkRequest PDU的应用
查看>>
使用 JavaScript开发的跨平台音乐、书籍播放器
查看>>
[na]完全理解icmp协议
查看>>