摘要: n<=50000个点m<=150000的带边权DAG,保证1入度0,n出度0,其他点入度出度均不为0,求:从一号点开始到n,期间有可能K<=10次随机选边走,最坏情况下总边权多少。 没理解题意系列。。问了唐神T_T题目是说,这个牛已经知道会有这种情况,所以在除了K次剩下的时间里它会选最优方案走,而如 阅读全文
posted @ 2017-09-12 21:27 Blue233333 阅读(206) 评论(0) 推荐(1) 编辑
摘要: n<=100000的树,砍S<n条边,求砍完后S+1棵树的最大直径的最小值。 树的直径要小小哒,那考虑一棵子树的情况吧!一棵子树的直径,就是子树根节点各儿子的最大深度+次大深度。就下面这样: 最大值最小肯定二分答案啦,那这棵子树如果有毛病呢,砍谁呢?肯定砍最大深度啦!所以就子树最大深度+次大深度有毛 阅读全文
posted @ 2017-09-11 16:56 Blue233333 阅读(208) 评论(0) 推荐(0) 编辑
摘要: h<=10000 * w<=10000的矩阵,每个格填不超过m<=10000的数,外加n<=10的限制,描述n个子矩阵中最大值一定要是多少,求方案数。 首先一块地能填的数就是1~这块地经过多重矩形覆盖后的最小值,然后要排除那些规定矩形填不到最大值的情况,所以答案为:每块地都满足<=该块地被限制矩形覆 阅读全文
posted @ 2017-09-11 13:58 Blue233333 阅读(461) 评论(0) 推荐(0) 编辑
摘要: n<=20个点m<=100条边有向图不带权,t个询问问Ai到Bi的经过k<=20条边方案数多少。 f[i][j]--i到j的方案数,,初始化成初邻接矩阵,这样做一次就得到2条路最短路,做两次就是4条……这东西不就是矩乘吗? 1 #include<stdio.h> 2 #include<string. 阅读全文
posted @ 2017-09-11 13:40 Blue233333 阅读(191) 评论(0) 推荐(0) 编辑
摘要: n<=50000个数做t<=1?????????反正不爆int次操作,每次把一个数组中每一个数变成当前,当前,当前数组的其他数的和,就是然后求最后每个Ai 每个数做的操作是一样的而且每个数加上的其他数的系数都是一样的,实验可得最后每个数都会变成: 至于x,y用矩阵算,base矩阵如下: 1 #inc 阅读全文
posted @ 2017-09-08 14:00 Blue233333 阅读(138) 评论(0) 推荐(0) 编辑
摘要: n<=1000000个数互不相同,我回答m<=25000个询问说Li到Ri最小值是Xi,求最早第几次答得互相矛盾。 首先找到矛盾的情况:一是两个无交区间最小值相同,二是大区间最小值比它子区间的最小值大。 方法一:二分答案,每次看一段里面有没有这两种冲突。先把询问按Xi排个序扫一次就知道有没有冲突一, 阅读全文
posted @ 2017-09-08 12:28 Blue233333 阅读(285) 评论(0) 推荐(0) 编辑
摘要: n<=50个游戏机有花费,每个游戏机有Gi<=10种游戏,每种游戏有花费有收益,买了游戏机才能玩对应游戏,求最大收益。 这就是一个背包!不过有依存关系,就不会了! 方法一:f[i][j]表示游戏机i用j块钱能得多少收益,这是可以预处理的,而g[i][j]表示前i个游戏机用j块钱最大收益, 果断tle 阅读全文
posted @ 2017-09-07 19:19 Blue233333 阅读(145) 评论(0) 推荐(0) 编辑
摘要: n<=100种硬币,给每种的硬币的面额<=120和我每种有多少个<=10000,店主的硬币跟我一样但有无限个,求买t<=10000块钱的东西钱最少转手几次。 我拿的硬币最少几次就是多重背包,店主还的最少当然是完全背包啦,那问题在于这个背包多大呀? 找回来的钱和我给的钱一定没有交集,如果有,那当初少给 阅读全文
posted @ 2017-09-06 14:26 Blue233333 阅读(223) 评论(0) 推荐(0) 编辑
摘要: n<=500 *n的格子,给m<=10000个格子有人,一炮可以清掉一行或一列的人(莫名的爽!)求最少几炮干掉所有人。 经典二分图模型!行成点,列成点,一个点就连接一行一列,表示这一行或这一列必选其一! 不喜欢匈牙利!跑网络流! 1 #include<stdio.h> 2 #include<stri 阅读全文
posted @ 2017-09-05 21:26 Blue233333 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 给n<=4000000,c,a1,b1,c1,a2,b2,c2,以c为初始得到的数,每次可以把得到的某个数x进行操作f1(x)=a1*x/c1+b1,f2(x)=a2*x/c2+b2,求最后能得到的数的第n个,保证c1<a1,c2<a2。 由于两个函数都单调递增,而且得到的数也是单调递增的,所以就在 阅读全文
posted @ 2017-09-05 20:51 Blue233333 阅读(200) 评论(0) 推荐(0) 编辑
摘要: n<=300000个点的树,给m<=300000条带权路径(ui,vi,保证vi是ui的祖先)求覆盖整棵树每条边的最小权和。 好题好姿势!直观的看到可以树形DP,f[i]表示把点i包括它爸爸下面那条边都覆盖的最小权,就用经过他爸爸那条边的所有路径,各条路径加上一些子树信息来更新即可。 这样时间炸,那 阅读全文
posted @ 2017-09-05 18:52 Blue233333 阅读(439) 评论(0) 推荐(0) 编辑
摘要: n<=400个地点第Ai秒会出礼物,给一个邻接矩阵描述地点间的路径耗时,去下一个地点只能走直接相连的路径(不一定最短路),求最多能拿多少。 有点水的DP。。f[i]表示去拿第i个(时间顺序)礼物最多能拿多少,f[i]=max(f[j]+1),其中时间允许从j走到i。 1 #include<stdio 阅读全文
posted @ 2017-09-04 13:04 Blue233333 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 数轴上n<=1000个点,从p出发以任意顺序走到所有的点,求到达每个点的时间之和的最小值。 好题!看起来水水的实际易错! 显然的结论是经过一个区间点之后肯定落在左端点或右端点上,谁没事最后还往中间跑呢!那就可以拍个序然后设计dp状态了,一个区间dp,f[i,j,0/1]表示走了区间i~j,最后落在左 阅读全文
posted @ 2017-09-03 23:38 Blue233333 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 给个长度<=1e5的串s,再给n个模板串总长不超1e5,每次把s中起始位置最早的一个模板串删掉,求最后剩的串。 AC自动机,开个栈记一下每次走到哪里,匹配成功后直接在栈里找到这一串的初始位置对应自动机上的节点,从而回到刚才的样子就行了。 1 #include<stdio.h> 2 #include< 阅读全文
posted @ 2017-09-03 22:27 Blue233333 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 制作失配函数时注意两点: 一是从上往下计算,开个队列~ 二是采用大白书的“一视同仁”法提高效率,就是一条边走不下去时直接把这条边接在失配函数的对应边上。 废话少说上代码~ 1 #include<cstdio> 2 #include<cstring> 3 #include<cstdlib> 4 #in 阅读全文
posted @ 2017-09-03 22:17 Blue233333 阅读(129) 评论(0) 推荐(0) 编辑