【题解】SAC E#1 - 一道难题 Tree】的更多相关文章

P3931 SAC E#1 - 一道难题 Tree 题目背景 冴月麟和魏潇承是好朋友. 题目描述 冴月麟为了守护幻想乡,而制造了幻想乡的倒影,将真实的幻想乡封印了.任何人都无法进入真实的幻想乡了,但是她给前来救她的魏潇承留了一个线索. 她设置了一棵树(有根).树的每一条边上具有割掉该边的代价. 魏潇承需要计算出割开这棵树的最小代价,这就是冴月麟和魏潇承约定的小秘密. 帮帮魏潇承吧. 注:所谓割开一棵有根树,就是删除若干条边,使得任何任何叶子节点和根节点不连通. 输入输出格式 输入格式: 输入第一…
原题传送门 题目几乎告诉你要用最大流 先进行搜索,将树的叶子节点都连到一个虚拟点T上,流量为inf(这样不会干扰到前面部分的最大流) 其他边按树的形态连边,以根节点为S,跑一变最大流即可求出答案 #include <bits/stdc++.h> #define N 100005 #define M 200005 #define inf (1<<30) #define getchar nc using namespace std; inline char nc(){ static c…
题目链接:https://www.luogu.org/problemnew/show/P3931 肉眼观察题目感觉可以跑最大流. 证明是如果拆断一棵树,可以最小割,最小割等于最大流. 注意: 图是无向边,在网络流里建两次边,即四次. 统计一下叶子节点,再建一个超级汇点,所有距离为inf. #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <…
Problem is here \(\text{Solution:}\) 首先,一眼看出这是最小割,只要叶子节点对汇点\(T\)连接流量为\(inf\)的边就可以一遍最大流搞定了. 剩下的问题在于,如何判断边的方向. 可以用\(dfs\)实现,方向由源点\(S\to T.\)而边权,注意到我们连的边是双向边,且编号连续.利用这一点我们可以在\(dfs\)里面对边进行赋值. #include<bits/stdc++.h> using namespace std; const int MAXN=5…
题目大意:给你一棵带权有根树,可以切断一些边,问使得根和叶子节点不连通的最小代价. 题解:做了一天的网络流,这道题显然可以用最小割来做,但是也可以用树形$DP$,基本同[SDOI2011]消耗战,这道题一次询问,只需要那个$O(n)$的$DP$就行了. 卡点:无 C++ Code: #include <algorithm> #include <cstdio> #define maxn 100010 const long long inf = 0x3f3f3f3f3f3f3f3f;…
圆原题面 我环顾四周,发现大佬们的写法都好高端! 比较差劲的我,只能交上一份DFS的题解 思路: DFS(当然了,其他算法也行) 要想切断叶子节点到根节点的连接 就是在叶子节点和根节点之间砍掉一条边 这明显就很符合DFS的性质,一条路一直走下去,遇到分枝就分开走 于是我们DFS每一条路径,然后求答案 复杂度为O(n) 但是--还没完! 我们可以发现DFS有三种情况 1.该节点为叶子节点,此时只能删去连接它和父节点的边 2.该节点为枝节点,有父节点和子节点,需要选择性的删除 3.该节点为根节点,只…
题目背景 冴月麟和魏潇承是好朋友. 题目描述 冴月麟为了守护幻想乡,而制造了幻想乡的倒影,将真实的幻想乡封印了.任何人都无法进入真实的幻想乡了,但是她给前来救她的魏潇承留了一个线索. 她设置了一棵树(有根).树的每一条边上具有割掉该边的代价. 魏潇承需要计算出割开这棵树的最小代价,这就是冴月麟和魏潇承约定的小秘密. 帮帮魏潇承吧. 注:所谓割开一棵有根树,就是删除若干条边,使得任何任何叶子节点和根节点不连通. 输入输出格式 输入格式: 输入第一行两个整数n,S表示树的节点个数和根. 接下来n-1…
传送门 简单dp题. f[i]表示以i为根的子树被割掉的最小值. 那么有: f[i]=min(∑vf[v],dist(i,fa))" role="presentation" style="position: relative;">f[i]=min(∑vf[v],dist(i,fa))f[i]=min(∑vf[v],dist(i,fa)) 直接树形dp就行了. 代码: #include<bits/stdc++.h> #define N 10…
题目背景 冴月麟和魏潇承是好朋友. 题目描述 冴月麟为了守护幻想乡,而制造了幻想乡的倒影,将真实的幻想乡封印了.任何人都无法进入真实的幻想乡了,但是她给前来救她的魏潇承留了一个线索. 她设置了一棵树(有根).树的每一条边上具有割掉该边的代价. 魏潇承需要计算出割开这棵树的最小代价,这就是冴月麟和魏潇承约定的小秘密. 帮帮魏潇承吧. 注:所谓割开一棵有根树,就是删除若干条边,使得任何任何叶子节点和根节点不连通. 输入输出格式 输入格式: 输入第一行两个整数n,S表示树的节点个数和根. 接下来n-1…
题目背景 冴月麟和魏潇承是好朋友. 题目描述 冴月麟为了守护幻想乡,而制造了幻想乡的倒影,将真实的幻想乡封印了.任何人都无法进入真实的幻想乡了,但是她给前来救她的魏潇承留了一个线索. 她设置了一棵树(有根).树的每一条边上具有割掉该边的代价. 魏潇承需要计算出割开这棵树的最小代价,这就是冴月麟和魏潇承约定的小秘密. 帮帮魏潇承吧. 注:所谓割开一棵有根树,就是删除若干条边,使得任何任何叶子节点和根节点不连通. 输入输出格式 输入格式: 输入第一行两个整数\(n\),\(S\)表示树的节点个数和根…
problem #include <bits/stdc++.h> #define rep(i,j,n) for(register int i=j;i<=n;i++) #define Rep(i,j,n) for(register int i=j;i>=n;i--) #define low(x) x&(-x) using namespace std ; typedef long long LL ; const int inf = INT_MAX >> 1 ; in…
P3926 SAC E#1 - 一道不可做题 Jelly [链接]:https://www.luogu.org/problem/show?pid=3926 题目背景 SOL君(炉石主播)和SOL菌(完美信息教室讲师)是好朋友. 题目描述 SOL君很喜欢吃蒟蒻果冻.而SOL菌也很喜欢蒟蒻果冻. 有一天,他们在一起搓炉石,而SOL菌则要拿出蒟蒻果冻招待他的客人. 蒟蒻果冻一般在a度下保存在冰箱里.但是刚拿出来的时候太冰了,需要加热.SOL菌打算用一种神奇的电炉加热蒟蒻果冻.根据观察,它有一个特点:…
P3926 SAC E#1 - 一道不可做题 Jelly 题目背景 SOL君(炉石主播)和SOL菌(完美信息教室讲师)是好朋友. 题目描述 SOL君很喜欢吃蒟蒻果冻.而SOL菌也很喜欢蒟蒻果冻. 有一天,他们在一起搓炉石,而SOL菌则要拿出蒟蒻果冻招待他的客人. 蒟蒻果冻一般在a度下保存在冰箱里.但是刚拿出来的时候太冰了,需要加热.SOL菌打算用一种神奇的电炉加热蒟蒻果冻.根据观察,它有一个特点: 1.蒟蒻果冻小于c度的时候,每p单位时间加热1单位温度: 2.当蒟蒻果冻等于c度的时候,需要q单位…
题目来源: https://leetcode.com/problems/binary-tree-postorder-traversal/ 题意分析: 后序遍历一棵树,递归的方法很简单,尝试用非递归的方法. 题目思路: 后序遍历的顺序是,先左子树,再右子树,最后才是根节点.递归的思想很简单,那么非递归的方法也是利用栈来实现,后进先出,不过这里先进的应该是左子树,那么得到的结果是根节点,右子树接着左子树.最后将结果翻转就可以了.代码给的是非递归的方法. 代码(python): # Definitio…
题目来源: https://leetcode.com/problems/binary-tree-preorder-traversal/ 题意分析: 前序遍历一棵树,递归的方法很简单.那么非递归的方法呢. 题目思路: 前序遍历的顺序是先遍历根节点,再遍历左子树,最后遍历右子树.递归的方法很直观.非递归的方法是利用栈来实现,后进先出,先放右子树进入栈.代码给的是非递归的方法. 代码(python): # Definition for a binary tree node. # class TreeN…
题目来源: https://leetcode.com/problems/binary-tree-maximum-path-sum/ 题意分析: 给定一棵树,找出一个数值最大的路径,起点可以是任意节点或者叶子. 题目思路: 我们可以先找路径的最大mr,ml,那么最大值是max(solve(root),solve(left),solve(right), max(mr + root.val + ml, root.val)). 代码(python): # Definition for a binary…
LeetCode 原题链接 Construct Binary Tree from Inorder and Postorder Traversal - LeetCode Construct Binary Tree from Preorder and Postorder Traversal - LeetCode 题目大意 给定一棵二叉树的中序遍历和后序遍历,求这棵二叉树的结构. 给定一棵二叉树的前序遍历和中序遍历,求这棵二叉树的结构. 样例 Input: inorder = [9, 3, 15, 2…
感觉对期望也一无所知……(:′⌒`)╮(╯﹏╰)╭ 一直在考虑怎么dp,最后看了题解——竟然是这样的???[震惊]但是看了题解之后,觉得确实很有道理…… 我们可以考虑最后答案的组成,可以分开计算不同的点对于答案的贡献(期望具有线性性).我们可以把这个染色的过程看做每一个节点均需要被染色,但只有第一个被染色的节点会消耗1点代价.这样我们就可以分别分析每个点对于答案产生贡献的概率,答案即为概率之和.而一个点会对答案产生影响的概率是多少?实际上这只与它到根的链上的节点是相关的,因为只要在染色它的祖先节…
[题目]洛谷10月月赛R1 提高组 [题意]给定n*n棋盘和<=16个棋子,给几个棋子种类和攻击范围,现我方只有一马,求能否吃王. [算法]状压+BFS [题解]16种棋子中,马不能吃马,直接处理马和王,那么就剩13个棋子,可以压成2^13表示棋盘现有棋子存活状态. 然后对vis[2^13][n][n]进行bfs. 细节: 1.攻击直到碰到其它棋子,那个碰到的棋子也算攻击范围内. 2.判断碰到棋子时,注意该棋子是否在当前局面存活. 3.多组数据,Q中途退出要清空. 学到了: 1.一份长代码要细心…
[题目]洛谷10月月赛R1 提高组 [题意]求n!在k进制下末尾0的个数,n<=1e18,k<=1e16. [题解]考虑10进制末尾0要考虑2和5,推广到k进制则将k分解质因数. 每个质因数在n!中的数量,以2为例是n/2+n/4+n/8...这样统计.(含x个就被统计x次) 最后得到凑出的k的个数就可以得到末尾0的个数. 分解质因数复杂度O(√k),也使用pollard rho算法可以加速. #include <iostream> #include <stdlib.h>…
[题目]洛谷10月月赛R1 提高组 [算法]递推DP+树状数组 [题解]列出DP递推方程,然后用树状数组维护前后缀和. #include<cstdio> #include<cstring> #include<cctype> #include<cmath> #include<algorithm> #define lowbit(x) (x&-x) #define ll long long using namespace std; int re…
CF438E The Child and Binary Tree Description 给一个大小为\(n\)的序列\(C\),保证\(C\)中每个元素各不相同,现在你要统计点权全在\(C\)中,且点权和为\(m\)的二叉树个数,并对\(998244353\)取模. \(n,m \le 10^5\) Solution \(998244353\)?这很多项式...... 总之先颓柿子好了. 令\(f_n\)表示权值和为\(n\)的二叉树个数,\(g_n\)表示权值\(n\)是否出现在\(C\)中…
题目背景 小强和阿米巴是好朋友. 题目描述 小强很喜欢数列.有一天,他心血来潮,写下了一个数列. 阿米巴也很喜欢数列.但是他只喜欢其中一种:波动数列. 一个长度为n的波动数列满足对于任何i(1 <= i < n),均有: a[2i-1] <= a[2i] 且 a[2i] >= a[2i+1](若存在) 或者 a[2i-1] >= a[2i] 且 a[2i] <= a[2i+1](若存在) 阿米巴把他的喜好告诉了小强.小强便打算稍作修改,以让这个数列成为波动数列.他想知道…
题目背景 小强和阿米巴是好朋友. 题目描述 小强喜欢数列.有一天,他心血来潮,写下了三个长度均为n的数列. 阿米巴也很喜欢数列.但是他只喜欢其中一种,波动数列. 阿米巴把他的喜好告诉了小强.小强便打算找出这三个数列内的最长波动数列. 也就是说,如果我们将三个数列记做a[n][3],他必须要构造一个二元组序列:<p[i], q[i]>,使得对于任何 i>1 有: p[i] > p[i-1] 若q[i] = 0,a[p[i]][q[i]] >= a[p[i-1]][q[i-1]]…
题目背景 SOL君(炉石主播)和SOL菌(完美信息教室讲师)是好朋友. 题目描述 SOL君很喜欢阶乘.而SOL菌很喜欢研究进制. 这一天,SOL君跟SOL菌炫技,随口算出了n的阶乘. SOL菌表示不服,立刻就要算这个数在k进制表示下末尾0的个数. 但是SOL菌太菜了于是请你帮忙. 输入输出格式 输入格式: 本题包含多组数据. 每组输入仅包含一行:两个整数n,k. 输出格式: 对于每组输入,输出一个整数:n!在k进制下后缀0的个数. 输入输出样例 输入样例#1: 10 40 输出样例#1: 2 说…
Tags 搜索,状压​. 裸的旅行商问题 #include <stdio.h> #include <string.h> #define re register #define GC getchar() #define Clean(X,K) memset(X,K,sizeof(X)) #define U unsigned #define Min(X,Y) (X<Y?X:Y) short Qread () { ; char C = GC ; ') C = GC ; ') { X…
1.题目描述 2.问题分析 使用一个vector将所有节点的值以升序排列.然后比较,求和,加上. 3.代码 TreeNode* convertBST(TreeNode* root) { if (root == NULL) return NULL; vector<int> v; inorder(root,v); increaseVal(root, v); return root; } void increaseVal(TreeNode *root, vector<int> &…
1.题目描述 2.问题分析 利用递归fangf 3.代码 int maxDepth(Node* root) { int res = maxdep(root); return res; } int maxdep(Node *root) { if (root == NULL) ; else { ; for (auto child : root->children) { res = max(res,maxdep(child)+); } return res; } }…
题目就是给出一棵二叉搜索树,已知根节点为0,并且给出一个序列要插入到这课二叉树中,求这棵二叉树层次遍历后的序列. 用结构体建立节点,val表示该节点存储的值,left指向左孩子,right指向右孩子.中序遍历的顺序正好是序列从小到大的顺序,因此中序遍历的时候顺便赋值就可以了,最后层次遍历输出. 思路一:中序遍历的时候赋值 #include <iostream> #include <cstdio> #include <algorithm> #include <str…
题目传送门:https://www.luogu.org/problemnew/show/P3927 题目大意:给你两个正整数n,k,求n!在k进制下末尾零的数量. 我们通过简单的数学分析,便可以发现,n!可以化为x*k^y(x,y∈N),而末尾零的数量,正是y. 经过进一步化简,$n! = x*\prod_{1}^{d(k)}d_{i}*y_{i}$,其中$d_{i}$为k的素因子,此处d(k)表示k的素因子个数,在已知d的情况下,求$y$并不复杂. 同时,我们也可以将k也化为这个格式,$k =…