想要很对劲的讲解,请点击这里 题目大意 有一棵\(n\)(\(n\leq 50000\))个节点的树,有边权 求一条路径使该路径的边权平均值最接近给出的一个数\(k\) 输出边权平均值下取整的整数部分 题解 有关路径的边权平均值可以二分来做 假设已二分出边权平均值与\(k\)的差不超过\(m\),则应存在一条简单路径,路径上的\(p\)条边满足: \[-m\leq\frac{\sum_{i=1}^{p}{w_i}}{p}-k\leq m\] 两边同乘\(p\),得: \[-m*p\leq\sum…
题目分析: 这种乱七八糟的题目一看就是点分治,答案有单调性,所以还可以二分答案. 我们每次二分的时候考虑答案会不会大于等于某个值,注意到系数$k$是无意义的,因为我们可以通过转化使得$k=0$. 合并的过程相当于很多个向量,加起来后看斜率. 注意单个向量也要判定. 由于有了二分的答案$Ans$.判定变得简单多了,推一下. 令$(A,C)$是从一个点到重心的一个向量,$(B,D)$是从另一个点到重心的向量.其中$A$和$B$是重心到该点的路径权值和,$C$和$D$是经过的边数. $-k \leq…
BZOJ UOJ 记\(val_i\)是每条边的边权,\(s\)是边权和,\(t\)是经过边数,\(k\)是给定的\(k\). 在点分治的时候二分答案\(x\),设\(|\frac st-k|=x\),判断是否还能满足\(|\frac st-k|<x\). 因为是绝对值,分两种情况: \(\frac st-k\geq 0\to \sum val_i-k\geq 0\), 判断是否有\(\frac st-k< x\to\quad s-t*k<t*x\to\quad\sum val_i-k&…
题意 给定一棵 \(n\) 个点的树,给定 \(k\) ,求 \(|\frac{\sum w(路径长度)}{t(路径边数)}-k|\)的最小值. \(n\leq 5\times 10^5,k\leq 10^{13}\) 分析 看到分数考虑分数规划,二分答案 \(x\),式子转化成 \(-x< \frac{\sum w}{t}-k< x\) 将边权变为 \(w-k\) 消除 \(k\) 的影响.但是不能够直接求最长链.因为是路径,考虑点分治. 二分答案 \(x\) 之后考虑两条路径组合 \((A…
[UOJ#276][清华集训2016]汽水 试题描述 牛牛来到了一个盛产汽水的国度旅行. 这个国度的地图上有 \(n\) 个城市,这些城市之间用 \(n−1\) 条道路连接,任意两个城市之间,都存在一条路径连接.这些城市生产的汽水有许多不同的风味,在经过道路 \(i\) 时,牛牛会喝掉 \(w_i\) 的汽水.牛牛非常喜欢喝汽水,但过量地饮用汽水是有害健康的,因此,他希望在他旅行的这段时间内,平均每天喝到的汽水的量尽可能地接近给定的一个正整数 \(k\). 同时,牛牛希望他的旅行计划尽可能地有趣…
#274. [清华集训2016]温暖会指引我们前行 题意比较巧妙 裸lct维护最大生成树 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; #define lc t[x].ch[0] #define rc t[x].ch[1] #define pa t[x].fa co…
UOJ_274_[清华集训2016]温暖会指引我们前行_LCT 任务描述:http://uoj.ac/problem/274 本题中的字典序不同在于空串的字典序最大. 并且题中要求排序后字典序最大. 因此我们要求的路径一定是最大生成树上的路径. 于是变成了LCT模板题,动态维护最大生成树即可. 注意每次find可能会T,于是我又写了个并查集... 代码: #include <stdio.h> #include <string.h> #include <algorithm>…
UOJ 275. [清华集训2016]组合数问题 组合数 $C_n^m $表示的是从 \(n\) 个物品中选出 \(m\) 个物品的方案数.举个例子,从$ (1,2,3)(1,2,3)$ 三个物品中选择两个物品可以有 \((1,2),(1,3),(2,3)\) 这三种选择方法.根据组合数的定义,我们可以给出计算组合数$ C_m^n$的一般公式: \[ C_n^m=\frac{n!}{m!(n-m)!} \] 其中 \(n!=1×2×⋯×n\).(额外的,当 n=0n=0 时, n!=1n!=1)…
UOJ #269. [清华集训2016]如何优雅地求和 题目链接 给定一个\(m\)次多项式\(f(x)\)的\(m+1\)个点值:\(f(0)\)到\(f(m)\). 然后求: \[ Q(f,n,x) = \sum_{k = 0}^{n}f(k){n\choose k}x^k(1 - x) ^{n - k} \pmod{998244353} \] 考虑一个很巧妙的变化:组合数多项式! 设: \[ f(n)=\sum_{i=0}^m\binom{n}{i}h_i \] 可以这么玩的原因是\(\b…
[UOJ274][清华集训2016]温暖会指引我们前行 任务描述 虽然小R住的宿舍楼早已来了暖气,但是由于某些原因,宿舍楼中的某些窗户仍然开着(例如厕所的窗户),这就使得宿舍楼中有一些路上的温度还是很低. 小R的宿舍楼中有n个地点和一些路,一条路连接了两个地点,小R可以通过这条路从其中任意一个地点到达另外一个地点.但在刚开始,小R还不熟悉宿舍楼中的任何一条路,所以他会慢慢地发现这些路,他在发现一条路时还会知道这条路的温度和长度.每条路的温度都是互不相同的. 小R需要在宿舍楼中活动,每次他都需要从…
[UOJ#274][清华集训2016]温暖会指引我们前行 试题描述 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了一位火焰之神 “我将赐予你们温暖和希望!” 只见他的身体中喷射出火焰之力 通过坚固的钢铁,传遍了千家万户 这时,只听见人们欢呼 “暖气来啦!” 任务描述 虽然小R住的宿舍楼早已来了暖气,但是由于某些原因,宿舍楼中的某些窗户仍然开着(例如厕所的窗户),这就使得宿舍楼中有一些路上的温度还是很低. 小R的宿…
[清华集训2016]温暖会指引我们前行 统计 描述 提交 自定义测试 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了一位火焰之神 “我将赐予你们温暖和希望!” 只见他的身体中喷射出火焰之力 通过坚固的钢铁,传遍了千家万户 这时,只听见人们欢呼 “暖气来啦!” 任务描述 虽然小R住的宿舍楼早已来了暖气,但是由于某些原因,宿舍楼中的某些窗户仍然开着(例如厕所的窗户),这就使得宿舍楼中有一些路上的温度还是很低. 小R的…
题目链接: [清华集训2016]石家庄的工人阶级队伍比较坚强 题目大意:有$n=3^m$个人玩石头剪刀布,共$t$轮游戏,每轮每个人要和包括自己的所有人各进行$m$次石头剪刀布.每个人在$m$轮中的决策固定,即为这个人编号的长度为$m$的三进制(其中$0$表示剪刀.$1$表示石头.$2$表示布,不足$m$位用$0$补齐).每个人有一个初始分数$f_{0,x}$,给出一个分数矩阵$b$,其中$b_{i,j}$表示赢了$i$局输了$j$局的得分,在第$i$轮结束后,第$x$个人的分数为$f_{i,x…
题目链接: [清华集训2016]如何优雅地求和 题目大意:给出一个多项式$m+1$个点值$a_{0},a_{1}...a_{m}$(其中$f(i)=a_{i}$),并给出两个数$n,x$,求$Q(f,n,x)=\sum\limits_{k=0}^{n}f(k)C_{n}^{k}x^k(1-x)^{n-k}mod998244353$的值. 当$f(x)=1$时,$Q=\sum\limits_{i=0}^{n}C_{n}^{i}k^i(1-k)^{n-i}$,根据二项式定理可知这个式子结果为$1$.…
题目链接: [清华集训2016]温暖会指引我们前行 题目大意:有$n$个点$m$次操作,每次操作分为三种:1.在$u,v$两点之间连接一条编号为$id$,长度为$l$,温度为$t$的边.2.查询从$u$到$v$的最温暖的路径长度(定义最温暖的路径为将路径上的边按温度从小到大排序后字典序尽可能大).3.将编号为$id$的边长度修改为$l$. 仔细读题发现题目中说的字典序其实就是使路径上的边都尽可能大. 那么最优方案一定就是走最大生成树上的边咯. 用LCT动态维护最大生成树. 当新加入边两端点不连通…
uoj266[清华集训2016]Alice和Bob又在玩游戏(SG函数) uoj 题解时间 考虑如何求出每棵树(子树)的 $ SG $ . 众所周知一个状态的 $ SG $ 是其后继的 $ mex $ . 考虑其后继的 $ SG $ 如何求. 对于将 $ y $ 的贡献计算到其父亲 $ x $ 上. 如果删掉 $ x $ ,后继状态是所有儿子的 $ SG $ 异或, 如果删掉 $ y $ 以内的点,则是用 $ y $ 子树内的所有后继状态异或上 $ x $ 子树内 $ y $ 子树外的部分. 这…
题目分析: 我记得很久以前有人跟我说NOIP2016的题目出了加强版在清华集训中,但这似乎是一道无关的题目? 由于$k$为素数,那么$lucas$定理就可以搬上台面了. 注意到$\binom{i}{j} \equiv 0 {\mod k}$当且仅当将$i$和$j$用$k$进制表示的时候,有一位上的$i<j$. 位数上的计算用数位DP就没错了. 代码: #include<bits/stdc++.h> using namespace std; ; int t,k; long long n,m…
点此看题面 大致题意: 给你一棵树,要求你选择一条树上路径,使得这条路径上边权的平均值与定值\(k\)的差的绝对值最小.求出这个最小值. 分数规划 看到平均值,首先就应该想到分数规划吧. 我们二分答案\(x\),设选择了\(m\)条边,每条边边权为\(a_i\). 则答案\(x\)合法,需要满足: \[|\frac{\sum_{i=1}^ma_i}m-k|\le x\] 拆绝对值: \[-x\le\frac{\sum_{i=1}^ma_i}m-k\le x\] 每个式子同时乘上\(m\),去分母…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ276.html 题解 首先,读入的时候就将所有的 $w_i$ 减掉 $k$ . 于是我们要求的就是平均值最接近 0 的. 直接点分治,然后得到一些一端为当前点分中心的路径,设 $a,b$ 为其中两条路径,设 $v_a,v_b$ 为路径的边权和,$t_a,t_b$ 为路径的边数. 二分一个答案,假设差别**小于** $A$.由于题目要求的是下取整,所以我们为了方便,设的是**小于** $A$ ,这样做,最…
为什么你们常数都这么小啊 UOJ #276 题意:在树上找一条链使得|边权平均值$ -k$|尽量小,$ n<=5e4$ $ Solution:$ 首先二分答案$ ans$,即我们需要找一条链使得边权平均值 $\in [-ans,ans]$ 我们分正负两半分开讨论 先假设平均值$ \in (0,ans]$ 将原树点分 统计过根的所有链 将这些链记录长度$len$,边数$sum$,所属子树标号$id$之后按长度排序 添加一条链$(0,0,0)$,则过某点的链一定是某两条不在同一子树的链拼接而成 两条…
传送门 没想到点分治那一层-- 首先不难发现这是个分数规划,先把所有的边长减去\(k\),二分答案,设为\(mid\),就是要求路径平均值\(ans\in[-mid,mid]\) 先来考虑\(ans\in[0,mid]\)的的情况.我们考虑点分治,记下所有从根节点延伸下去的链,长度记为\(len\),边数为\(dep\),属于那一颗子树为\(bl\),先添加一条链\((0,0,0)\),那么两条链合法当且仅当\(\frac{len_i+len_j}{dep_i+dep_j}\in [0,mid]…
先挖坑(这个blog怎么变成游记专用了--) 已更完 #include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs.com/wangyurzee7/"); puts("谢谢您的配合"); puts("by wangyurzee7"); ; } Day-1 提前1天到BJ膜yjq 颓废 Day0 从八十中到西郊电疗中心 听说可以自带…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ266.html 题解 首先我们可以直接暴力 $O(n^2)$ 用 sg 函数来算答案. 对于一个树就是枚举一下从根出发到哪一个节点为止的路径被删掉了,剩下所有的子树的sg值xor起来,对于每一个路径后的答案取一个 mex . 我们考虑快速的做这个过程. 直接写个 Trie 再 DSU on tree 就好了,只要支持查询 mex 和整棵 trie 对某一个值 xor 这两种操作就好了. 时间复杂度 $O…
题目分析: 首先不难注意到式子就是异或卷积,所以考虑用分治乘法推出优化方法.我们把一个整体$f$拆成$f-,f\pm,f+$,然后另一个拆成$g-,g\pm,g+$.这样做的好处是能更清楚的分析问题.下面我们下宽油(大雾).发现三个部分要求的式子是在两者相乘中选不同的三个,所以我们发现三个部分中每取一个有相同.这样我们聚焦到$--,-\pm,-+$三个东西.观察二进制FWT,可以假想它们要使用到三次单位根.这样只需要把三个根错开排列就行了.做分治乘法的时候注意把虚部的$I$记做$\sqrt{3}…
题目分析: 不难发现可以用动态DP做. 题目相当于是要我求一条路径,所有与路径有交的链的代价加入进去,要求代价最大. 我们把链的代价分成两个部分:一部分将代价加入$LCA$之中,用$g$数组保存:另一部分将代价加在整条链上,用$d$数组保存. 这时候我们可以发现,一条从$u$到$v$的路径的代价相当于是$d[LCA(u,v)]+\sum_{x \in edge(u,v)}g[x]$. 如果是静态的,可以用树形DP解决. 看过<神奇的子图>的同学都知道,叶子结点是从它的儿子中取两个最大的出来,所…
题目分析: 把$0$卡牌看成$-1$.题目要求前缀和始终大于等于$1$. 最后添加一个$-1$,这样除了最后一位之外大于等于1,最后一位等于0. 构造圆排列.这样的话一个圆排列只有一个满足的情况,然后考虑我们多出了一个$-1$,所以除去. 代码: #include<bits/stdc++.h> using namespace std; ; ; int n,m; int a[maxn]; void read(){ scanf("%d",&n); ;i<=n;i+…
题目分析: 差评,最大生成树裸题.hack数据还卡常. 代码: #include<bits/stdc++.h> using namespace std; ; struct LCT{ ],d1[maxn],d2[maxn]; int val[maxn],tot[maxn],num; stack<int> sta; void push_up(int now){ val[now] = min(d1[now],min(val[ch[now][]],val[ch[now][]])); tot…
UOJ题目传送门 显然最优的路径只会经过若干条两个圆的公切线和若干段圆弧 为了方便,把起点终点看成两个半径为\(0\)的圆也行. 最烦的就是算两个圆的公切线了,一共有四条 对于靠外面的两条,我们把切线.半径和两圆心之间的线段连起来,会构成一个直角梯形. 我们可以求出两圆心连线的倾斜角,进而求出这两条切线的倾斜角,然后切线的直线方程就可以写出来了. 对于靠里面的两条,同样把切线.半径和两圆心之间的线段连起来,会出现两个相似三角形,同样可以把倾斜角求出来. 接着,判断这个切线段有没有被其它的圆挡住.…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ275.html 题解 用卢卡斯定理转化成一个 k 进制意义下的数位 dp 即可. 算答案的时候补集转化一下会好写一些. 代码 #include <bits/stdc++.h> using namespace std; typedef long long LL; LL read(){ LL x=0,f=0; char ch=getchar(); while (!isdigit(ch)) f|=ch=='…
题目链接:http://uoj.ac/problem/273 $${Ans=\frac{\prod _{i=1}^{m}i}{w-n+1}}$$ #include<iostream> #include<cstdio> #include<algorithm> #include<vector> #include<cstdlib> #include<cmath> #include<cstring> using namespace…