上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 29 下一页
摘要: 注意到怎么换都行,但是如果把某个黑方块用在对角线上,它原来所在的行列的的黑方块就都不能用 所以要选出n组不重的行列组合,这里用匈牙利算法做二分图匹配即可(用了时间戳优化) cpp include include include using namespace std; const int N=405 阅读全文
posted @ 2018-07-26 22:53 lokiii 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 非典型数位dp 先预处理出f[i][j][k]表示从后往前第i位为j时k的个数,然后把答案转换为ans(r) ans(l 1),用预处理出的f数组dp出f即可(可能也不是dp吧……) cpp include include using namespace std; long long l,r,t[2 阅读全文
posted @ 2018-07-26 22:32 lokiii 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 死活想不到分层图emmm 基本想法是建立分层图,就是建k+1层原图,然后相邻两层之间把原图的边在上一层的起点与下一层的终点连起来,边权为val/2,表示免了这条边的边权,然后答案就是第0层的s到k层的t的最短路,因为0权边总是从上一层连到下一层,所以到达k层就表示走了k条0权边 然后仔细观察这张图的 阅读全文
posted @ 2018-07-26 14:21 lokiii 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 注意到一行只能放012个炮,我们只需要知道列的状态,不用状压行 所以设f[i][j][k]表示前i行有j列有1个炮,有k列有2个炮的方案数 然后分情况讨论转移就行了 阅读全文
posted @ 2018-07-25 22:54 lokiii 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 在圆里所以没有平行四边形,n^4枚举点即可 cpp include include using namespace std; const int N=45; int n,a[N],s[N],ans; int main() { scanf("%d",&n); for(int i=1;i 阅读全文
posted @ 2018-07-25 22:46 lokiii 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 长久以来的心理阴影?但是其实非常简单…… 预处理出deep和每组st的lca,在这里我简单粗暴的拿树剖爆算了 然后考虑对于一组s t lca来说,被这组贡献的观察员x当且仅当: x在s到lca的路径上,且w[x]==de[s] de[x]—— de[x]+w[x]==de[s]; x在lca到t的路 阅读全文
posted @ 2018-07-25 22:07 lokiii 阅读(135) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-07-23 10:51 lokiii 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 参考:https://blog.csdn.net/heheda_is_an_oier/article/details/51131641 这个找奇偶环的dp1真是巧妙,感觉像tarjan一样 首先分情况讨论,如果没有奇环,每条边都可以删;如果有一个奇环,奇环上隋边山;否则,删被所有奇环覆盖且没被任何一 阅读全文
posted @ 2018-07-22 22:22 lokiii 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 我太菜了,看的hzwer的blog才懂 大概是设f[i]表示已经拥有了i张邮票后期望还要买的邮票数,这个转移比较简单是f[i]=f[i]\ (i/n)+f[i+1] ((n i)/n)+1 然后设g[i]为还需要的钱,可以把转移看做每张票都比前面的贵1元,就是g[i]=((n i)/n)\ (g[i 阅读全文
posted @ 2018-07-21 21:58 lokiii 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 传送:http://www.joyoi.cn/problem/tyvj 2054 来自lyd课件: 所以先预处理出各个sum为0的块,然后状压dfs取min来得到答案 cpp include include include using namespace std; const int N=10000 阅读全文
posted @ 2018-07-20 17:04 lokiii 阅读(296) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-07-20 14:55 lokiii 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 传送:http://poj.openjudge.cn/practice/C18D/ 依然是课件截图 cpp include include include include include using namespace std; const int N=405,mod=1e9+7,inf=2e9; 阅读全文
posted @ 2018-07-19 22:24 lokiii 阅读(181) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-07-19 10:41 lokiii 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 很有意思的题,~~所以还是截lyddalao的课件~~ cpp include include include using namespace std; const int N=6005; int T,n,f[N],s[N]; long long ans; struct qwe { int u,v, 阅读全文
posted @ 2018-07-18 17:26 lokiii 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 想象成一层一层的染,所以相邻的两个格子连边,边权同色为0异色为1,然后答案就是某个格子到距离它最远得黑格子的最短距离的最小值 注意特判掉不需要染色的情况 cpp include include include include using namespace std; const int N=55,i 阅读全文
posted @ 2018-07-18 15:17 lokiii 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 我要懒死了,所以依然是lyd的课件截图 注意是min{max(max(d[uk]),dis(u1,ui),dis(uj,un))},每次都从这三个的max里取min cpp include include using namespace std; const int N=500005; int n, 阅读全文
posted @ 2018-07-17 16:35 lokiii 阅读(171) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-07-15 16:41 lokiii 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 直接抄ppt好了……来自lyd 注意只用对根判断是否哟留下儿子 cpp include include using namespace std; const int N=100005; long long n,ans,h[N],cnt,fa[N],dis[N],d1,d2,l1,l2,c1,at[N 阅读全文
posted @ 2018-07-15 16:16 lokiii 阅读(102) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-07-13 22:37 lokiii 阅读(2) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-07-11 23:00 lokiii 阅读(1) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-07-10 22:45 lokiii 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 先求出每棵树的直径,排个序,要想图的直径最小的话需要每棵树的直径中点像直径最大的树的直径中点连边,这样直径有三种情况:是直径最大的树的直径:a[tot];是直径最大的树和直径第二大的树的半径拼起来+1:(a[tot]+1)/2+(a[tot 1]+1)/2+1);是直径第二大的树和直径第三大的树的半 阅读全文
posted @ 2018-07-09 09:14 lokiii 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 参考:https://blog.csdn.net/shiyukun1998/article/details/44684947 先看对于树的情况 设d[u]为点u向儿子走的期望长度和,du[u]为u点的度数,f[u]为u向儿子走的期望长度,只需要dfs两遍,一次求向儿子的d[u]+=f[e[i].to 阅读全文
posted @ 2018-07-08 22:53 lokiii 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 我太菜了居然调了一上午…… 这个题就是要求基环树森林的基环树直径和 大概步骤就是找环— dp找每个环点最远能到达距离作为点权— 复制一倍环,单调队列dp 找环是可以拓扑的,但是利用性质有更快~~好写~~的做法,就是像朱刘算法找环那样,按照输入的方向(i— to_i)打一圈标记,如果碰到同样标记就说明 阅读全文
posted @ 2018-07-08 15:01 lokiii 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 首先转换图论模型,把某个客户一个终端的维修时间(+1)%h之后和另一个终端维修时间一样,这样的两个终端连一条有向边,表示推后一个终端就必须推后另一个 然后tarjan缩点,一个scc里的终端是要一起推迟的,scc内点数为新图点权 根据贪心的思想,在缩完点的DAG里,一定是出度为0的点能获得更小的值, 阅读全文
posted @ 2018-07-07 23:10 lokiii 阅读(342) 评论(0) 推荐(0) 编辑
摘要: 首先认识一下01邻接矩阵k次幂的意义:经过k条边(x,y)之间的路径条数 所以可以把矩阵当成邻接矩阵,全是 0的话意味着两两之间都能相连,也就是整个都要在一个强连通分量里,所以直接tarjan染色,如果只有一个色块的话就是YES否则都是NO(其实应该能更简单一些,不过tarjan比较顺手) 还有就是 阅读全文
posted @ 2018-07-07 13:44 lokiii 阅读(323) 评论(0) 推荐(0) 编辑
摘要: !:自环也算一条路径 矩阵快速幂,把矩阵乘法的部分替换成Floyd(只用一个点扩张),这样每“乘”一次,就是经过增加一条边的最短路,用矩阵快速幂优化,然后因为边数是100级别的,所以把点hash一下最多剩下200个 阅读全文
posted @ 2018-07-06 22:47 lokiii 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 二分答案,然后dp判断是否合法 具体方法是设f[u]为u点到其子树中的最长链,每次把所有儿子的f值取出来排序,如果某两条能组合出大于mid的链就断掉f较大的一条 a是全局数组!!所以要先dfs完子树才能填a!! 阅读全文
posted @ 2018-07-06 22:04 lokiii 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 写错一个符号多调一小时系列…… 二分答案,然后判断这个二分区间是否合法: 先按值 从大到小 排序,然后对于值相同的一些区间,如果没有交集则不合法;否则把并集在线段树上打上标记,然后值小于这个值的区间们,如果交集打过标记了,那么不合法,因为这个打过标记的区间一定不会有更小的值了,但是现在有一个更小的数 阅读全文
posted @ 2018-07-05 17:37 lokiii 阅读(142) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-07-05 11:13 lokiii 阅读(4) 评论(0) 推荐(0) 编辑
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 29 下一页