题意 给定一棵有n个节点的无根树,树上的每个点有一个非负整数点权.定义一条路径的价值为路径上的点权和-路径上的点权最大值. 给定参数P,我!=们想知道,有多少不同的树上简单路径,满足它的价值恰好是P的倍数. 注意:单点算作一条路径:u!=v时,(u,v)和(v,u)只算一次. 题解 树上路径统计,解法是点分治.点分的时候求出根到每个点路径最大值和权值和.排一序,然后开个桶,就能计算了.去重就套路的减去没棵子树里面的答案. CODE #include <bits/stdc++.h> using…
从暴力考虑转化题意 考虑最暴力的做法,我们枚举路径的两端,然后采用类似求树上路径长度的做法,计算两点到根的贡献,然后除去\(LCA\)到根的贡献两次. 即,设\(v_i\)为\(i\)到根路径上的边权异或和,那么\((x,y)\)的答案就是: \[v_x\ xor\ v_y\ xor\ v_{LCA(x,y)}\ xor\ v_{LCA(x,y)}\] 由于\(v_{LCA(x,y)}\ xor\ v_{LCA(x,y)}=0\),所以答案就是: \[v_x\ xor\ v_y\] 于是,题意就…
题目描述 给出一棵树,求出最小的k,使得,且在树中存在路径p,使得k>=S且k<=E.(k为路径p上的边的权值和) 输入 第一行给出N,S,E.N代表树的点数,S,E如题目描述. 下面N-1行给出这棵树的相邻两个节点的边及其权值W. 输出 输出共一行一个整数,表示答案.若无解输出-1. 样例输入 5 10 40 2 4 80 2 3 57 1 2 16 2 5 49 样例输出 16 样例解释 1到2的路径即为答案. 数据范围 对于20%的数据满足n<=300 对于50%的数据满足n<…
算是一道比较新颖的题目 尽管好像是两年前的省选模拟赛题目.. 对于20%的分数 可以进行爆搜,对于另外20%的数据 因为k很小所以考虑上状压dp. 观察最后答案是一个连通块 从而可以发现这个连通块必然存在一个深度最浅的点且唯一 所以随便找一个点做根然后对自己子树内寻找答案就可以是正确的. 考虑另外的30%的数据k<=3 可是颜色数最多可以有n个 不知道哪个是最终答案. 一次状压dp的复杂度:\(2^{2k}\cdot n\) 容易得到可以暴力枚举一下 然后要做 \(C(n,3)\) 这样会TLE…
30%:暴力 40%:枚举L,R从L~n枚举,R每增大一个,更新需要的边(bfs实现)60%:枚举每条边, 计算每条边的贡献另外20%的数据:枚举每条边,计算每条边的贡献100%:对于每一条边统计 有多少个区间跨过这条边即可统计这一问题的对偶问题,有多少个区间没跨过会更方便使用启发式合并+ 并查集统计子树内的,使用启发式合并+set统计子树外的 代码: #include<cstdio> #include<cstdlib> #include<set> #include&l…
我是发了疯才来写这道题的 我如果用写这道题的时间去写dp,我估计我能写上三四道 可怕的数据结构题 题目 这道题的鬼畜之处在于实在是不太好写 我们看到要求离树根尽量的近,所以我们很容易就能想到树上倍增,所以我们需要有一种能快速求出一条路径能被多少条给出路径完全覆盖 我们知道起点是固定的,要求完全覆盖的话我们必须要保证给定的路径的一个端点在起点的子树里,同时还要求另一个端点在路径的终点的外部,也就是说路径的\(LCA\)深度小于等于终点 于是这样就可以写一个还算可观的\(40\)分暴力了 这是考场上…
Time 7:50 AM -> 11:15 AM 感觉今天考完后,我的内心是崩溃的 试题 考试包 T1: 首先看起来是个贪心,然而,然而,看到那个100%数据为n <= 2000整个人就虚了,发呆接近两小时后意识到这个应该是个dp,然后开始考虑dp方程,脑残把dp打成了n^3,果断上天..而且在转移过程中推错多打了一个-1,于是3个wa 1个ac 6个TLE ,10分滚粗 T1 dp 正解: 使用二维dp记录当前状态,dp[i][j]表示在前i个妖精中选择了j个妖精的最小时间,转移过程如下:…
思维 这道题应该算是一道思维题吧. 首先你要想到,既然这是一棵无根树,就要明智地选择根--以第一个黑点为根(不要像我一样习惯性以\(1\)号点为根,结果直到心态爆炸都没做出来). 想到这一点,这题就很简单了. 具体 设\(p_i\)为从\(i\)到根路径上的最小值,考虑一个黑点\(y\)对于\(x\)号点的贡献. 显然这一贡献就是将\(x\)的答案向\(y\)到\(LCA(x,y)\)路径上的最小值取\(min\). 而由于\(LCA(x,y)\)到根路径上的最小值也是\(x\)到根路径上的最小…
考场上随手构造了一组数据把自己卡掉了 然后一直都是掉线状态了. 最后发现这个东西不是subtask -1的情况不多 所以就没管无解直接莽 写题有点晚 故没调出来.. 考虑怎么做 容易想到建立AC自动机 然后不能跑到结尾节点 fail是结尾节点的也不能跑. 把那些节点抽出来就可以随便跑了 题目描述非常丧心病狂 两个字符串相等描述的莫名其妙. 不过这道题的本意让我们求出两端在环内的字符串个数. 发现如果存在不是简单环的话是无解的 如果出现两个环的路径上还是环的话也同时无解. 对于前者 一个非常妙的t…
1 考试时又犯了一个致命的错误,没有去思考T2的正解而是去简单的推了一下式子开始了漫漫找规律之路,不应该这样做的 为了得到规律虽然也打了暴力 但是还是打了一些不必要的程序 例如求组合数什么的比较浪费时间了. 考试后在我看来这都是浪费时间了 浪费了我足足1h30min 其实是可以避免的 得不到正解先去看下一道题 都做完了再回来重新审视这道题. 2 T3的正解推得的时间虽然不长但是没有仔细思考自己的做法是否优秀尽管应该是正确的 但是不充足的思考让我的代码变得非常的冗长. 例如 一些区间求和的操作我完…