信息学奥赛一本通提高篇
AndrewMe8211
no more threads
展开
-
loj #10095 P1262 间谍网络
analysis首先将题面简化,问题就成为:给一个有向图,有一些特殊点有权值,其他点都没有权值,选取特殊点中的一部分使得其权值和最小且其与其相连的点构成的集合等价于所有点构成的集合(语文差,没办法)考虑简化问题,即将环缩成点,然后再做考虑(注意缩点的时候新点的权值要是旧点中的最小值,且还要维护一个点中序号最小标记)缩点后,发现问题就转化为对图中以特殊点为起点的链的染色,由于链会重合,故可以...原创 2019-05-19 17:36:08 · 285 阅读 · 1 评论 -
「一本通 6.4 例 4」曹冲养猪
analysis很明显了,翘板子code#include<bits/stdc++.h>using namespace std;#define loop(i,start,end) for(register int i=start;i<=end;++i)#define anti_loop(i,start,end) for(register int i=start;i&g...原创 2019-07-30 20:42:00 · 299 阅读 · 0 评论 -
「一本通 6.2 练习 5」luoguP1445 [Violet]樱花
analysis首先先得化简式子,因为这个式子确实看不出来什么一般看到的题解里有这两种化法:1.1x+1y=1n!\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}x1+y1=n!1xyx+y=n!\frac{xy}{x+y}=n!x+yxy=n!xy=n!(x+y)xy=n!(x+y)xy=n!(x+y)−n!(x+y)+xy=0←→(n!x+n!y...原创 2019-07-30 17:05:59 · 342 阅读 · 0 评论 -
「一本通 6.2 练习 2」[USACO08DEC] Patting Heads 轻拍牛头
analysis算是一眼题吧n方很好想考虑优化?若Aj∣AiA_j|A_iAj∣Ai设f(Ai)f(A_i)f(Ai)为值为AiA_iAi的纸片要拍的牛头数则很容易有:f(Ai)=∑Aj∣Aif(Aj)f(A_i)=\sum_{A_j|A_i}f(A_j)f(Ai)=∑Aj∣Aif(Aj)这不就是DP里面的刷表法吗code#include <bits/s...原创 2019-07-29 21:40:30 · 204 阅读 · 0 评论 -
「一本通 6.2 例 1」 UVA10140 Prime Distance[线性筛]
analysis由于R太大,考虑求出R\sqrt RR内的所有质数,然后用类似刷表的方法来解决区间[L,R]的质数,然后对于区间[L,R]中的质数进行两两比较,最后求得最值(在对于区间[L,R]中的质数进行两两比较时,真的不建议用while循环,细节太不好处理了)code#include <iostream>#include <fstream>#includ...原创 2019-07-29 21:21:59 · 177 阅读 · 0 评论 -
「一本通 6.3 例 1」luogu P1463 [POI2002][HAOI2007]反素数
analysis暴力!很显然,答案就是在小于n里面的因数个数最大的数中最小的一个于是考虑唯一分解定理,就可以借助因数个数公式暴力dfs了由于数据范围较小,构成答案的质数个数不会多于11个,且每个质数的指数不会超过31(可以自己去算,很小的),复杂度为∏logaMAXN,a为小于等于29的质数\prod log_{a}{MAXN},a为小于等于29的质数∏logaMAXN,a为小于等于2...原创 2019-07-29 18:23:22 · 177 阅读 · 0 评论 -
LOJ #10131. 「一本通 4.4 例 2」暗的连锁
analysis这是一道好题诶!对于我这种蒟蒻来说是属于比较考思维的一道题开始看到题一脸懵逼,根本不知道从何下手看到书上的讲解后才恍然大悟:原来就是个差分嘛!我们枚举每条非树边(x,y),把x到y路径上所有边的边权+1,对于每条树边,如果边权为0,则切断它之后原图已经不联通,第二条边随便切一条,共m种方案。如果边权为1,则第二步必须切断对应的那条边,方案数1,如果边权大于2则没有方案。...原创 2019-07-19 19:29:08 · 272 阅读 · 1 评论 -
「一本通 6.4 例 1」 luogu P1516 青蛙的约会
analysis首先,模拟不能过那么就是一道数学:设青蛙a从位置A开始,步长为m,青蛙b从位置B开始,步长为n设青蛙a从位置A开始,步长为m,青蛙b从位置B开始,步长为n设青蛙a从位置A开始,步长为m,青蛙b从位置B开始,步长为n则a的位置:A+km,b的位置:B+kn,其中,k为跳跃步数则a的位置:A+km,b的位置:B+kn,其中,k为跳跃步数则a的位置:A+km,b的位置:B+kn...原创 2019-07-29 11:52:45 · 192 阅读 · 0 评论 -
loj #10094. 「一本通 3.5 练习 2」消息的传递
analysis模版。。。。。code#include<bits/stdc++.h>using namespace std;#define loop(i,start,end) for(register int i=start;i<=end;++i)#define anti_loop(i,start,end) for(register int i=start;i>...原创 2019-05-24 10:39:07 · 291 阅读 · 0 评论 -
luogu P2746 #10093. [USACO5.3]校园网Network of Schools
analysis先缩点子任务1很好解决,就是求入度为0的点的个数考虑子任务2,问题其实就是问最少添加多少条边可以将原图变成一个强联通图显然,若原图本来就是强联通图,答案为0若不是强联通图,考虑强联通图的性质从而构造强联通图。由于强联通其实就是由若干环组成的,即每个点一定在某个或某几个环上面,那么对于一个非强联通图,一定存在点不在环上面。不在环上面意味着没有入度或出度,故要构造,就可以直...原创 2019-05-24 10:23:31 · 159 阅读 · 0 评论 -
loj #10092 luogu P2272 [ZJOI2007]最大半连通子图
analysis这个题的难点其实不在算法上,而在读题上,若将题读懂了就好了仔细研究定义可得,半联通子图其实就包含强联通子图和链,(链也是一个半联通子图),于是缩点后问题就转化为图中最长链的长度和条数,用记搜即可。记搜时维护两个变量:maxdep[i],f[i],分别指i号节点的最大深度和i号节点在当前最大深度的可行方案数,于是就可以AC了code#include<bits/stdc...原创 2019-05-24 16:39:57 · 284 阅读 · 0 评论 -
luogu P2146 [NOI2015]软件包管理器
analysis手推一下数据可以得到:如果对于依赖关系(a,b),我们将b连向a(将边反向),这样的话,安装软件包就意味着查询从这个点到根节点这条路径上已安装的软件包的个数然后将其全部赋值1,卸载软件包就意味着查询以这个点为根节点的子树内已安装的个数然后将其清零树链剖分是没错了,但同时要对线段树的操作进行改进,即将区间全部赋值1和全部赋值0而不是累加注意不要把线段树打残了,否则调试半天c...原创 2019-04-26 09:16:23 · 143 阅读 · 1 评论 -
luogu P3178 [HAOI2015]树上操作
analysis一看题,修改点和链查询子树点集的权值和,就是树链剖分了!code#include<bits/stdc++.h>using namespace std;#define loop(i,start,end) for(register int i=start;i<=end;++i)#define anti_loop(i,start,end) for(regi...原创 2019-04-20 17:43:08 · 172 阅读 · 0 评论 -
loj #10096 luogu P3627 [APIO2009]抢掠计划
analysis缩点后,问题转化为在图中求一个起点为S,终点为某个酒吧的链使得这个链最长,于是联想到spfa,故缩点后跑一遍spfa就可以了code#include<bits/stdc++.h>using namespace std;#define loop(i,start,end) for(register int i=start;i<=end;++i)#defi...原创 2019-05-24 11:55:53 · 162 阅读 · 0 评论 -
luogu P2341 [HAOI2006]受欢迎的牛
analysis由题中可得奶牛的喜欢具有传递性,故在同一个强联通分量里面的奶牛都互相喜欢。于是本着简化问题的原则,我们将同一个分量里的奶牛缩成一个点再做考虑。缩点后本题就没有了环,显然,没有出度的点个数大于1,则没有明星奶牛。反之,则对于某个点所代表的奶牛群体来讲,若这个群体里的奶牛都是明星奶牛的话,这个点必定没有出度,这是由于:假设u有出度连到v,而u是明星奶牛,则一定有一条u到v的通路,...原创 2019-05-17 15:04:47 · 154 阅读 · 0 评论 -
「一本通 3.4 例 1」 POJ 1201-Intervals
analysis本题使用差分约束求解:设sis_isi为1到i所选的数的个数,我一开始是这样列的:{sbi−sai−1>=ci0<=si<=bi0<=si−si−1<=1\begin{cases}s_{b_i}-s_{a_i-1}>=c_i\\0<=s_{i}<=b_i...原创 2019-08-30 16:14:33 · 408 阅读 · 0 评论