「Luogu P3931」SAC E#1 - 一道难题 Tree 解题报告
圆原题面
我环顾四周,发现大佬们的写法都好高端!
比较差劲的我,只能交上一份DFS的题解
思路:
DFS(当然了,其他算法也行)
要想切断叶子节点到根节点的连接
就是在叶子节点和根节点之间砍掉一条边
这明显就很符合DFS的性质,一条路一直走下去,遇到分枝就分开走
于是我们DFS每一条路径,然后求答案
复杂度为O(n)
但是——还没完!
我们可以发现DFS有三种情况
1、该节点为叶子节点,此时只能删去连接它和父节点的边
2、该节点为枝节点,有父节点和子节点,需要选择性的删除
3、该节点为根节点,只有子节点,只能删去连接它和子节点的边
Code:
#include<bits/stdc++.h>
#define INF 0x7f7f7f7f
using namespace std;
struct node{
int to,cost;
int nxt;
node(int a,int b):to(a),cost(b){ }
node(){ }
}b[200010];
int n,t,r;
int head[100010];
int read()
{
int s=0;
char c=getchar();
while(!isdigit(c))
c=getchar();
while(isdigit(c))
{
s=(s<<1)+(s<<3)+c-'0';
c=getchar();
}
return s;
}
void add(int x,int y,int cost)//建边
{
b[++t]=node(y,cost);
b[t].nxt=head[x];
head[x]=t;
b[++t]=node(x,cost);
b[t].nxt=head[y];
head[y]=t;
return;
}
int Get(int k,int in)
{
int i;
int res=0;
for(i=head[k];i;i=b[i].nxt)
if(i!=(in^1))//成对变换原理,异或值相同但方向相反的边为一组,避免重复
res+=Get(b[i].to,i);
if(!b[head[k]].nxt&&k!=r)//确定是叶子节点
res=b[in].cost;
else
res=min(res,b[in].cost);//否则两种方法选其一
return res;
}
int main()
{
int i;
int x,y,cost;
n=read();r=read();
t=1;//初始赋1,利于成对变换
for(i=1;i<n;i++)
{
x=read();y=read();cost=read();
add(x,y,cost);
}
b[0].cost=INF;//对于根节点的双重保险,防止出什么岔子,比如结果为0
printf("%d",Get(r,0));
return 0;
}
「Luogu P3931」SAC E#1 - 一道难题 Tree 解题报告的更多相关文章
- 「洛谷P3931」 SAC E#1 - 一道难题 Tree
P3931 SAC E#1 - 一道难题 Tree 题目背景 冴月麟和魏潇承是好朋友. 题目描述 冴月麟为了守护幻想乡,而制造了幻想乡的倒影,将真实的幻想乡封印了.任何人都无法进入真实的幻想乡了,但是 ...
- 【luogu P3931 SAC E#1 - 一道难题 Tree】 题解
题目链接:https://www.luogu.org/problemnew/show/P3931 肉眼观察题目感觉可以跑最大流. 证明是如果拆断一棵树,可以最小割,最小割等于最大流. 注意: 图是无向 ...
- 【题解】Luogu P3931 SAC E#1 - 一道难题 Tree
原题传送门 题目几乎告诉你要用最大流 先进行搜索,将树的叶子节点都连到一个虚拟点T上,流量为inf(这样不会干扰到前面部分的最大流) 其他边按树的形态连边,以根节点为S,跑一变最大流即可求出答案 #i ...
- 2018.09.14 洛谷P3931 SAC E#1 - 一道难题 Tree(树形dp)
传送门 简单dp题. f[i]表示以i为根的子树被割掉的最小值. 那么有: f[i]=min(∑vf[v],dist(i,fa))" role="presentation" ...
- [洛谷P3931]SAC E#1 - 一道难题 Tree
题目大意:给你一棵带权有根树,可以切断一些边,问使得根和叶子节点不连通的最小代价. 题解:做了一天的网络流,这道题显然可以用最小割来做,但是也可以用树形$DP$,基本同[SDOI2011]消耗战,这道 ...
- 洛谷 P3931 SAC E#1 - 一道难题 Tree
题目背景 冴月麟和魏潇承是好朋友. 题目描述 冴月麟为了守护幻想乡,而制造了幻想乡的倒影,将真实的幻想乡封印了.任何人都无法进入真实的幻想乡了,但是她给前来救她的魏潇承留了一个线索. 她设置了一棵树( ...
- 「BZOJ1722」「Usaco2006 Mar」Milk Team Select产奶比赛 解题报告
Milk Team Select 产奶比赛 Description Farmer John's N (\(1 \le N \le 500\)) cows are trying to select th ...
- SAC E#1 - 一道难题 Tree
题目背景 冴月麟和魏潇承是好朋友. 题目描述 冴月麟为了守护幻想乡,而制造了幻想乡的倒影,将真实的幻想乡封印了.任何人都无法进入真实的幻想乡了,但是她给前来救她的魏潇承留了一个线索. 她设置了一棵树( ...
- SAC E#1 - 一道难题 Tree(树形DP)
题目背景 冴月麟和魏潇承是好朋友. 题目描述 冴月麟为了守护幻想乡,而制造了幻想乡的倒影,将真实的幻想乡封印了.任何人都无法进入真实的幻想乡了,但是她给前来救她的魏潇承留了一个线索. 她设置了一棵树( ...
随机推荐
- 一些关于中国剩余定理的数论题(POJ 2891/HDU 3579/HDU 1573/HDU 1930)
2891 -- Strange Way to Express Integers import java.math.BigInteger; import java.util.Scanner; publi ...
- Uniapp使用iconfont
看别人的项目有各种各样的图标既好看占用内存还小 后来才知道原来有icon图标这个东西,原谅我真的一直处于混沌的状态. 刚好最近项目使用了uniapp框架,引入iconfont的方式和之前有些不太一样 ...
- H3C TCP连接的建立
- iptables [match] 常用封包匹配参数
参数 -p, --protocol 范例 iptables -A INPUT -p tcp 说明 匹配通讯协议类型是否相符,可以使用 ! 运算符进行反向匹配,例如: -p !tcp 意思是指除 tcp ...
- iptables command 常用命令列表
命令 -A, --append 范例 iptables -A INPUT ... 说明 新增规则到某个规则链中,该规则将会成为规则链中的最后一条规则. 命令 -D, --delete 范例 iptab ...
- 2018-8-10-win10-sdk-是否向下兼容
title author date CreateTime categories win10 sdk 是否向下兼容 lindexi 2018-08-10 19:16:53 +0800 2018-2-13 ...
- Python--day61--Django的ORM
下载驱动
- 【9104】&&【a103】阶乘和
Time Limit: 10 second Memory Limit: 2 MB 问题描述 已知正整数n(n≤100),设s=1!+2!+3!+...+n!.其中"!"表示阶层,即 ...
- dotnet 方法名 To 和 As 有什么不同
在看到 dotnet 框架里面有很多方法里面用了 ToXx 和 AsXx 好像都是从某个类转换为另一个类,那么这两个方法命名有什么不同 在约定的方法命名里面,用 To 的方法表示从类 A 转为类 B ...
- ZOJ——String Successor(字符串模拟题目)
ZOJ Problem Set - 3490 String Successor Time Limit: 2 Seconds Memory Limit: 65536 KB The succes ...