圆原题面

我环顾四周,发现大佬们的写法都好高端!

比较差劲的我,只能交上一份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 解题报告的更多相关文章

  1. 「洛谷P3931」 SAC E#1 - 一道难题 Tree

    P3931 SAC E#1 - 一道难题 Tree 题目背景 冴月麟和魏潇承是好朋友. 题目描述 冴月麟为了守护幻想乡,而制造了幻想乡的倒影,将真实的幻想乡封印了.任何人都无法进入真实的幻想乡了,但是 ...

  2. 【luogu P3931 SAC E#1 - 一道难题 Tree】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3931 肉眼观察题目感觉可以跑最大流. 证明是如果拆断一棵树,可以最小割,最小割等于最大流. 注意: 图是无向 ...

  3. 【题解】Luogu P3931 SAC E#1 - 一道难题 Tree

    原题传送门 题目几乎告诉你要用最大流 先进行搜索,将树的叶子节点都连到一个虚拟点T上,流量为inf(这样不会干扰到前面部分的最大流) 其他边按树的形态连边,以根节点为S,跑一变最大流即可求出答案 #i ...

  4. 2018.09.14 洛谷P3931 SAC E#1 - 一道难题 Tree(树形dp)

    传送门 简单dp题. f[i]表示以i为根的子树被割掉的最小值. 那么有: f[i]=min(∑vf[v],dist(i,fa))" role="presentation" ...

  5. [洛谷P3931]SAC E#1 - 一道难题 Tree

    题目大意:给你一棵带权有根树,可以切断一些边,问使得根和叶子节点不连通的最小代价. 题解:做了一天的网络流,这道题显然可以用最小割来做,但是也可以用树形$DP$,基本同[SDOI2011]消耗战,这道 ...

  6. 洛谷 P3931 SAC E#1 - 一道难题 Tree

    题目背景 冴月麟和魏潇承是好朋友. 题目描述 冴月麟为了守护幻想乡,而制造了幻想乡的倒影,将真实的幻想乡封印了.任何人都无法进入真实的幻想乡了,但是她给前来救她的魏潇承留了一个线索. 她设置了一棵树( ...

  7. 「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 ...

  8. SAC E#1 - 一道难题 Tree

    题目背景 冴月麟和魏潇承是好朋友. 题目描述 冴月麟为了守护幻想乡,而制造了幻想乡的倒影,将真实的幻想乡封印了.任何人都无法进入真实的幻想乡了,但是她给前来救她的魏潇承留了一个线索. 她设置了一棵树( ...

  9. SAC E#1 - 一道难题 Tree(树形DP)

    题目背景 冴月麟和魏潇承是好朋友. 题目描述 冴月麟为了守护幻想乡,而制造了幻想乡的倒影,将真实的幻想乡封印了.任何人都无法进入真实的幻想乡了,但是她给前来救她的魏潇承留了一个线索. 她设置了一棵树( ...

随机推荐

  1. 一些关于中国剩余定理的数论题(POJ 2891/HDU 3579/HDU 1573/HDU 1930)

    2891 -- Strange Way to Express Integers import java.math.BigInteger; import java.util.Scanner; publi ...

  2. Uniapp使用iconfont

    看别人的项目有各种各样的图标既好看占用内存还小 后来才知道原来有icon图标这个东西,原谅我真的一直处于混沌的状态. 刚好最近项目使用了uniapp框架,引入iconfont的方式和之前有些不太一样 ...

  3. H3C TCP连接的建立

  4. iptables [match] 常用封包匹配参数

    参数 -p, --protocol 范例 iptables -A INPUT -p tcp 说明 匹配通讯协议类型是否相符,可以使用 ! 运算符进行反向匹配,例如: -p !tcp 意思是指除 tcp ...

  5. iptables command 常用命令列表

    命令 -A, --append 范例 iptables -A INPUT ... 说明 新增规则到某个规则链中,该规则将会成为规则链中的最后一条规则. 命令 -D, --delete 范例 iptab ...

  6. 2018-8-10-win10-sdk-是否向下兼容

    title author date CreateTime categories win10 sdk 是否向下兼容 lindexi 2018-08-10 19:16:53 +0800 2018-2-13 ...

  7. Python--day61--Django的ORM

    下载驱动

  8. 【9104】&&【a103】阶乘和

    Time Limit: 10 second Memory Limit: 2 MB 问题描述 已知正整数n(n≤100),设s=1!+2!+3!+...+n!.其中"!"表示阶层,即 ...

  9. dotnet 方法名 To 和 As 有什么不同

    在看到 dotnet 框架里面有很多方法里面用了 ToXx 和 AsXx 好像都是从某个类转换为另一个类,那么这两个方法命名有什么不同 在约定的方法命名里面,用 To 的方法表示从类 A 转为类 B ...

  10. ZOJ——String Successor(字符串模拟题目)

    ZOJ Problem Set - 3490 String Successor Time Limit: 2 Seconds      Memory Limit: 65536 KB The succes ...