luogu5290 春节十二响】的更多相关文章

题目链接 思路 先考虑一条链的情况怎么做. 因为只有两个子树,并且两个子树都是链.所以可以把这两条链找出来,然后\(sort\)一下.合并起来. 然后推广到树上 对于每一棵树都可以按照和上面同样的方法合并成一条链. 这样就可以\(O(n^2logn)\)做了. 考场上就想到这些.而且链的情况还忘了存档... 启发式合并 只要对于每个节点维护出一个堆,并且进行启发式合并.就可以达到\(O(nlogn)\)的复杂度了. 还是太菜了... 代码 /* * @Author: wxyww * @Date:…
[BZOJ5499][2019省队联测]春节十二响(贪心) 题面 BZOJ 洛谷 题解 如果是一条折链,显然维护两侧的值,每次两个堆分别弹出一个\(max\)然后合并一下,最后再放回去就可以了. 那么现在回到一棵树上,可以认为就是本身有一条链,现在每次要合并一条链进来,那么拿一个堆维护这个合并过程就可以了.为了保证复杂度用启发式合并. 在\(C++11\)下可以直接使用\(.swap()\)函数来进行优先队列的交换. 为了在\(BZOJ\)上过就写的普通的启发式合并. #include<cstd…
题目地址:P5290 [十二省联考2019]春节十二响 骗分方法 如果你实在一点思路也没有,暴力都不会打,那么请考虑一下骗分. 方法一 输出所有 \(M\) 的和. 期望得分:0分. 实际还有5分 方法二 注意到有 \(15\) 分为一条链,分两种情况考虑: 1号点有一个儿子--详见方法一. 1号点有两个儿子--把对这两个儿子下的两条链弄成两个堆,每次取出两个堆的堆顶,取 \(max\) 加入答案,当一个堆取尽后,把另一个堆里的所有元素加入答案,最后加入 \(M_1\) . 期望得分:15分.…
P5290 [十二省联考2019]春节十二响 从特殊到一般 我们先看链的情况. 我们把点$1$左右的两条子链分别扔入堆里 每次取出两个堆的最大值,把答案累加上更大的那个(另一堆为空则直接加上去). 那么......如果$1$连着多条链咋办? 我们又发现,你可以每次把每2条链所对的堆两两合并,并不影响答案. 那么......如果$1$连着多棵树咋办? 其实是链是树已经没多大区别了,因为它们之间互不影响. 于是做法就出来了 dfs把子树合并,一层层合并上去就好辣 注意为了保证复杂度$O(nlog^2…
考虑链的做法,显然将两部分各自从大到小排序后逐位取max即可,最后将根计入.猜想树上做法相同,即按上述方式逐个合并子树,最后加入根.用multiset启发式合并即可维护.因为每次合并后较小集合会消失,总复杂度O(nlogn).场上并没有被启发得到这个优美的贪心. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #incl…
题目分析: 对于一个根,假设我们对每个子树分别求出了一种答案,那么怎么合并答案是最小的呢? 首先考虑这些答案里面最大的那个数字,它肯定要融合其它组里面的最大数字.以此类推 所以最好的合并方式是,每个子树的答案从大到小排序,然后依次合并. 然后我们会发现,这个其实是可以划分子问题的,因为如果某个子树不按照这种方式划分,那么必然不会使得某个位置变小另一个位置变大,只会使得相应位置变大. 所以按子树划分下去,把堆合并就行. 代码: #include<bits/stdc++.h> using name…
这题是最近看到的今年省选题中最良心的一道了吧 看题+想题+写题都可以在0.5h内解决,送分含义明显啊 首先理解了题意后我们很快就能发现两个点如果要被分在一段那么必须在它们的祖先处合并 首先我们考虑下二叉树怎么做,发现如果对于每个节点维护一个堆,然后每次在一个点合并两个儿子的堆 根据简单分析我们发现必然是不断取出两个堆中最大的元素合并直到一个空了为止 那么普通的树怎么做呢,如果你稍微有点经验就会发现这个很好扩展,直接把所有儿子合并即可 但是这样一个元素可能会重复入堆多次,解决方法也很简单,直接启发…
嘟嘟嘟 这题真没想到这么简单-- 首先有60分大礼:\(O(n ^ 2logn)\)贪心.(我也不知道为啥就是对的) 然后又送15分链:维护两个堆,每次去堆顶的最大值. 这时候得到75分已经很开心了,但其实离AC也就差一点点. 链的做法已经给了我们提示:合并两个堆.其实这就相当于二叉树.那多叉树呢?就合并多个堆呗!从子树向上递归的时候不断将子树启发式合并,复杂度就保证了. 代码真的很短 #include<cstdio> #include<iostream> #include<…
联考Day2T2...多亏有这题...让我水了85精准翻盘进了A队... 题目大意: 挺简单的就不说了吧...(这怎么简述啊) 题目思路: 看到题的时候想了半天,不知道怎么搞.把样例画到演草纸上之后又画了几条链手动找最优解,然后发现只需要知道怎么合并子树就行了.因为题目说的很清楚,合并出来链就行,然后手动模拟了一下合并,由于有父子关系的两个点不能被合并在一起,那么从最优的角度考虑显然贪心,把其他链中的最大与当前链最大取\(\max\),第二大同理,以此类推.那么显然需要一个堆维护,然后考虑合并后…
题目链接 [洛谷传送门] [LOJ传送门] 题目大意 给定一棵树,每次选取树上的一个点集,要求点集中的每个点不能是另一个点的祖先,选出点集的代价为点集中权值最大点的权值,问将所有点都选一遍的最小代价为多少. (题目大意来自洛谷题解某一篇) 题解 分析一下这一道题目. 首先,因为不能存在祖先关系,那么在一条链上的所有点一定是要分开来取的. 那么很显然,根必须一个点一个集合,那么在递归子树,同样的操作,把子树独立的递归,然后合并子树内的最大值. 代码 #include <bits/stdc++.h>…
题面 传送门 题解 先考虑一条链的情况,对于\(1\)号点来说,肯定是左子树中最大值和右子树中最大值一组,左子树中次大值和右子树中次大值一组--以此类推 那么如果不是一条链呢?我们把所有的链合并起来就是了.每个节点开个堆,启发式合并就可以了 //minamoto #include<bits/stdc++.h> #define R register #define ll long long #define inline __inline__ __attribute__((always_inlin…
题目链接 LOJ:https://loj.ac/problem/3052 洛谷:https://www.luogu.org/problemnew/show/P5290 BZOJ:https://www.lydsy.com/JudgeOnline/problem.php?id=5499 Solution 部分分有一个链的情况极大的提示了正解. 考虑链情况怎么做,显然是\(1\)号节点向下延伸出了两条支链,那么我们可以分别\(\rm sort\)然后最大的和最大的成对,次打的同理,这样显然是最优的.…
Description 给定一棵 \(n\) 个节点的树,点有点权,将树的节点划分成多个集合,满足集合的并集是树的点集,最小化每个集合最大点权之和. Limitation \(1~\leq~n~\leq~2~\times~10^5,~1~\leq~M~\leq~10^9\) 其中 \(M\) 表示树的最大点权. Subtasks: 对于前 \(45\%\) 的数据, \(n~\leq~16\) 另有 \(15\%\) 的数据,保证树的形态是一条链,但是 \(1\) 号节点不一定是根节点 另有 \…
首先看两条链怎么合并,贪心可得是从大到小取max,多条链同理 所以dfs合并子树的大根堆即可,注意为了保证复杂度,合并的时候要合并到最长链上,证明见长链剖分 #include<iostream> #include<cstdio> #include<queue> using namespace std; const int N=200005; int n,a[N],h[N],cnt,id[N],tot,p[N]; long long ans; priority_queue…
直接编译运行即可 #include<bits/stdc++.h> #include<windows.h> using namespace std; char a[31][71]; void w() { system("cls"); for(int i=1;i<=29;i++) { for(int j=1;j<=70;j++) cout<<a[i][j]; cout<<endl; } return; } int main() {…
思维难度不大,在考上上写的启发式合并写错了,只拿了 60 pts,好难过QAQ 没什么太难的,在考场上想出链的部分分之后很容易就能想到正解.没错,就是非常短的启发式合并.注意一下,写的要漂亮一点,否则会疯狂 TLE.还有一个细节,想交换优先队列时不能直接交换队列,而是对于树中每个节点都存一个在实际队列编号中的位置,计为 $idx[u]$,每次交换 $idx[u]$ 和 $idx[to[v]]$. Code: #include <cstdio> #include <algorithm>…
还有33天就要高考了,我在干啥-- 题目概述 一棵有根树,每个节点有权值. 要求把所有节点分成组,具有祖先-后代关系的两个节点不能被分到同一组. 每一组的代价是所包含的节点的最大权值,最小化所有组的代价之和. 题解 想了半天的树剖也没想出来,放弃梦想去看题解--(你怎么不先想想部分分啊喂) 发现是启发式合并. 考虑一条链(1号节点在中间的某个位置)咋做. 这棵树的形状是1号节点下面挂着两条长链.隶属于同一条链的节点都不能放在一组.那么只需要把两条链各自的最大值节点放到一组,各自的次大值节点放到一…
原题传送门 每个点维护一个堆,表示这个点及其子树所需的每段内存的空间 搜索时从下向上做启发式合并堆中信息,最后根节点堆中所有内存空间之和就是答案 #include <bits/stdc++.h> #define N 200005 #define ll long long #define getchar nc using namespace std; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&…
题意 略 分析 稍微yy一下可以感觉就是一个不同子树合并堆,然后考场上写了一发左偏树,以为100分美滋滋.然而发现自己傻逼了,两个堆一一对应合并后剩下的一坨直接一次合并进去就行了.然鹅我这个sb把所有元素pop一次再merge进去-然后就O(n2)O(n^2)O(n2) 60分滚粗了- 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 时间复杂度分析: 每个点只会被pop出去一次,pop的时候伴随了一次pop一次merge. 每一对父子关系merge了一次 所以时间复杂度是O(nlogn)O(nlogn)…
首先可以发现对于两条链来说,显然是对两边都排好序,然后大的配大的,小的配小的(正确性比较显然),最后再加入根(根只能单独选)这个结果其实也可以理解为将所有max构成一条新的链,求出因此,对于每一个结点计算出答案,然后与别的点合并得到父亲,用启发式合并+set时间复杂度为两个log. 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 200005 4 struct ji{ 5 int nex,to; 6 }edge[N];…
题目 题意简述   link.   给一棵 \(n\) 个结点的有根树,点带权.把点分为若干组,并要求同组内不存在任何祖先-后代关系.最小化每组内的最大点权之和. 数据规模   \(n\le2\times10^5\). Solution   考虑一个部分分--链.   当根节点 \(1\) 不是链头,相当于 \(1\) 左右两条链分组,\(1\) 单独一组.而显然,答案是若干点权的和.所以我们只需要贪心地让较大点权与最大点权成为一组来减小答案.   所以可以用堆--把 \(1\) 左右的点权存入…
在这样一场毒瘤的省选中 这道题目无疑是命题人无私的馈赠 大量精心构造的部分分,涵盖了题目中所有涉及的算法 你可以利用这道题目,对你是否能够进入省队进行初步检查 经典的模型.较低的难度和不大的代码量,能帮助你把分数收入囊中 出题人相信,这个美妙的题目,可以给拼搏于省队的逐梦之路上的你,提供一个有力的援助. By 2019十二省联考命题人 Emmm,显然不是说给我听的. 你看,两紫一黑 Day –? Loli在黑板上设置了倒计时:[距一轮____天].然而这个倒计时甚至总是忘了更新.今天(4月10日…
「ZJOI2019」&「十二省联考 2019」题解索引 「ZJOI2019」 「ZJOI2019」线段树 「ZJOI2019」Minimax 搜索 「十二省联考 2019」 「十二省联考 2019」异或粽子 「十二省联考 2019」字符串问题 「十二省联考 2019」春节十二响…
\(\large{Day\ -1}:\) 放假了,白天大概是抱着最后一次在机房的心态复习着板子过去的.看着机房里的各位神仙丝毫不慌的颓倒是有点慌了,敲了一下多项式的板子感觉写的相当自闭,感觉AFO应该是稳了,不过这样想的话好像也不用太慌......考前的压力还是有的,毕竟rank1已经吊打我70分了,周围各位神仙进队期望都比我高.嗯......还是调整一下心态好了,如果真的AFO就坦然的接受吧,毕竟联赛之后状态也挺差的,跑的那么慢也该被淘汰. 晚上......继续复习板子好了,有可能的话再看点各…
做了十二省联考的题.暂时只更几个比较可做的题目. 异或粽子 考试的时候乱搞了个做法.结果以每个大数据点 \(1900+\ ms\) 的优秀效率通过了此题... 乱搞 建一颗 \(Trie\) 树,显然可以每次用一个 \(log\) 查询与 \(a_i\) 异或的第 \(p\) 大值.每个数与其他数异或显然最多有前 \(k\) 大有用.如果对每个数把这 \(k\) 个值查询出来,时间复杂度为 \(O(n^2log a_i)\) . 考虑一个简单的剪枝,用一个堆维护当前所有查询出的值中前 \(k\)…
Day 1 T1 异或粽子 题意:给出一个长为n的序列,选择K个不完全重合的区间使得每个区间的异或值的总和最大. 题解:先做一个前缀异或和,对于每一个右端点我们记录三元组(l,r,x)表示在左端点在\([l,r]\)内,最大异或值为x,塞进堆里.每次取出堆顶,并将该三元组对应的区间分裂成两个,重新扔回堆里.计算区间最大异或值利用可持久化字典树. 时间复杂度\(O(n\log n+K\log Maxvalue)\) #include <bits/stdc++.h> #define fo(i,a,…
目录 @day - 0@ @day - 1@ @day - 2@ @后记@ 我只是来打酱油哒-- 顶多能进个 E 类继续打酱油. 原本还在互奶 A 队,结果现在--铁定进不了队啦. 对初中生的歧视啊 qwq. @day - 0@ 试机日. 想起来我前几天有一道题还没过,于是继续调试. 每次想要打 \ 总会按到回车,想要打退格结果又按到了 \. 这个键盘真的好令人难受啊(可能只是因为不习惯而已?上次 noip 的键盘也这个样子来着)-- 一开始的时候好像没有网啊--还靠的是学长的手机开热点上网.…
Android特效专辑(十二)--仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View 先来看看这个效果 这是我的在Only上添加的效果,说实话,Only现在都还只是半成品,台面都上不了,怪自己技术不行,也太懒了 PS:这个view也是我模仿了人家的效果,参考了人家的思路写的,不是纯手撸,罪过罪过,网上应该也能找到很多这样的效果,我只是加入了一些自己的需求在里面 我么新建一个工程--Whew RoundImageView 这个之前讲过,网上 的粒子,把头像变成圆形的,这里就不多说了,直接撸代码…
大家好,我是老三,面渣逆袭系列继续,这节我们来搞定Redis--不会有人假期玩去了吧?不会吧? 基础 1.说说什么是Redis? Redis是一种基于键值对(key-value)的NoSQL数据库. 比一般键值对数据库强大的地方,Redis中的value支持string(字符串).hash(哈希). list(列表).set(集合).zset(有序集合).Bitmaps(位图). HyperLogLog.GEO(地理信息定位)等多种数据结构,因此 Redis可以满足很多的应用场景. 而且因为Re…
一. 合理使用title, description, keywords二. 合理使用h1 - h6, h1标签的权重很高, 注意使用频率三. 列表代码使用ul, 重要文字使用strong标签四. 图片添加alt属性, title可选. img最好加上宽, 高利于加载五. 重要代码在前面, 通过css布局改变渲染顺序六. display: none是不会被爬虫抓取, js不被爬虫抓取, iframe少用七. 链接一定用a标签八. 重要目录节点最好不要太深九. 原创内容, 高质外链十.常备404 页…