这题在浴谷夏令营wyx在讲的最小生成树的时候提到过,但并没有细讲怎么写... 这题可以用三种写法写,虽然只有两种能过...(倍增/倍增+并查集/树链剖分 先跑出最小生成树,分类讨论,在MST上的边,考虑用可以对这条边有影响的(判断是否有影响同后面)不在MST上的边的最小值-1来更新,不在MST上的边u->v,考虑用MST上u到v的路径上的边的最大值-1来更新. 显然用倍增就可以了,细节看代码.复杂度O(NlogN) #include<iostream> #include<cstdl…
D. Edge Weight Assignment 题意 给出一个n个节点的树,现在要为边赋权值,使得任意两个叶子节点之间的路径权值异或和为0,问最多,最少有多少个不同的权值. 题解 最大值: 两个叶子节点x,y,如果他们的父亲都是z,那么[x,z],[y,z]的权值必须相同. 其他边可以保证任意两个边的权值都不相同. 最小值: 如果任意两个叶子节点的路径长度为偶数,给所有边赋一个正值就可以. 如果存在奇数:最少需要三个值. 代码 #include<bits/stdc++.h> #define…
[题目]D. Best Edge Weight [题意]给定n个点m条边的带边权无向连通图,对每条边求最大边权,满足其他边权不变的前提下图的任意最小生成树都经过它.n,m<=2*10^5,1<=wi<=10^9. [算法]最小生成树+倍增LCA+并查集 [题解]首先求出图的一个最小生成树M,则所有边分成树边和非树边. 一.对于非树边(u,v),假设u和v在最小生成树M上的路径的最大边权是Max.要保证这条边在最小生成树上,只要w(u,v)=Max-1. 下面证明w(u,v)=Max-1时…
LINK:Edge Weight Assignment 这场当时没打 看到这个B题吓到我了 还好当时没打. 想了20min才知道怎么做 而且还不能证明. 首先考虑求最小. 可以发现 如果任意两个叶子节点之间的距离都是偶数 那么显然 答案为1. 可以发现 如果有两个叶子之间的距离为奇数 那么答案至少为3. 考虑画多张图 可以发现不管怎么做 答案最多为3. 尝试证明:对于两个点之间的距离是奇数时 每三段我们认为是0 最后一定剩下两端 填一样的数字即可. 可以发现这样构造可行.(画图证明法更好一点.…
洛谷P4281:https://www.luogu.org/problemnew/show/P4281 思路 答案所在的点必定是三个人所在点之间路径上的一点 本蒟蒻一开始的想法是:先求出2个点之间的LCA 再求出此LCA和第3个点的LCA 但是没有考虑到有可能答案所在点可能比2个点之间的LCA深度更深 因为两点之间的LCA是两点共同能到达的深度最浅的一个点 所以我们可以考虑: 设a=LCA(x,y) 此时x和y到a点为最小花费 则此时z到a的花费可以用LCA(a,z)来计算 因此我们分别计算3种…
$n \leq 2e5,m \leq 2e5$的有边权图,对每条边问:不改其他边的情况下这条边最多能是多少使得他一定在所有最小生成树上,如果无穷大输出-1. 典型题+耗时题,CF上的绝望时刻..打VP时前三题花时间太多,导致这题看完题只剩20min,代码还得再敲稳点. 好进入正题,瞎造一棵最小生成树先然后分树上边和树外边回答,树外边$(x,y)$要替代树链$x-y$的某条边,必须比树链上最大的那条边要小1,是一个树链求$Max$,可以st表搞定:树上的边要刚好不被树外边替代,那应该刚好小于能替代…
You are given a connected weighted graph with n vertices and m edges. The graph doesn't contain loops nor multiple edges. Consider some edge with id i. Let's determine for this edge the maximum integer weight we can give to it so that it is contained…
先用kruskal处理出一个最小生成树 对于非树边,倍增找出两端点间的最大边权-1就是答案 对于树边,如果它能被替代,就要有一条非树边,两端点在树上的路径覆盖了这条树边,而且边权不大于这条树边 这里可以树剖来做,但是不想用.. 如果先把非树边从小到大排序然后去覆盖树边,那么一条树边只需要被覆盖一次 所以可以用一个并查集来把父子边被覆盖的点合到一起,在合并之前记下来这次覆盖的边权,下次再覆盖的时候直接跳过去就可以 #include<bits/stdc++.h> #define pa pair&l…
Day1 第一题 水题 第二题 题意:一个n*m的字符矩阵从左上到右下,经过字符形成回文串的路径数.n≤500 回文串,考虑两段往中间DP. f[k][x][y]表示走了k步,左上点横坐标为x,右下点横坐标为y的路径数. 两端2*2四种情况转移,k步这维滚动. 第三题 题意:区间加数,区间覆盖,询问区间x次幂和.n≤10^5. 主要难点在区间加数时维护x次幂和……实际上就是简单的二项式展开. Σ(a+b)^n=Σ[ΣC(n,r)*a^(n-r)*b^r]=Σ[C(n,r)*Σa^(n-r)*b^…
题目:https://www.luogu.org/problemnew/show/P4245 用三模数NTT做,需要注意时间和细节: 注意各种地方要取模!传入 upt() 里面的数一定要不超过2倍 mod! 乘法会爆 long long 时用快速乘! 两次合并的模数,第一次是 (ll) p1*p2,第二次直接对题目的模数取模即可! 注意局部开 (ll)! 合并时用到的逆元每次都一样,所以要先处理好而不是现场快速幂算!! 然而为什么时间还是 Narh 的两倍! 一晚上的心血... 代码如下: #i…