摘要: 转自 概念 有带权图G, 对于图中每条边e[i], 都有benifit[i](收入)和cost[i](花费), 我们要求的是一棵生成树T, 它使得 ∑(benifit[i]) / ∑(cost[i]), i∈T 最大(或最小). 这显然是一个具有现实意义的问题. 解法之一 0-1分数规划 设x[i] 阅读全文
posted @ 2016-08-11 21:00 Yangjiyuan 阅读(1436) 评论(0) 推荐(0) 编辑
摘要: 按要求连边,跑匈牙利 阅读全文
posted @ 2016-08-11 20:51 Yangjiyuan 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 将(x,y)转化成(x+y,x-y)可以将切比雪夫距离转化成曼哈顿距离(自己推一推) A、B的切比雪夫距离就是A‘、B‘曼哈顿距离的一半。 那么可以将x、y分离处理,排序中位数即可。 注意如果最后选的最优的X、Y代回去不是整数,要在其上下左右中选个最优方案。 #include<algorithm> 阅读全文
posted @ 2016-08-11 20:50 Yangjiyuan 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 现在问题有硬石头和软石头的限制 所以要对地图进行预处理 分行做,把有#隔开的*(x)形成联通块的存储下来。 分列作,把有#隔开的*(x)形成联通块的存储下来。 求出所有的行联通个数和列联通个数 作为二分图两边的点 求一遍最大匹配 阅读全文
posted @ 2016-08-11 20:48 Yangjiyuan 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 离散化+线段树 阅读全文
posted @ 2016-08-11 15:28 Yangjiyuan 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 首先,单点修改求区间和可以用树状数组实现 因为开平方很耗时间,所以在这个方面可以优化 我们知道,开平方开几次之后数字就会等于1 所以,用数组记录下一个应该开的数,每次直接跳到下一个不是1的数字进行开平方,至于这个数组,可以用并查集维护。 阅读全文
posted @ 2016-08-11 15:27 Yangjiyuan 阅读(450) 评论(0) 推荐(0) 编辑
摘要: 枚举左端点,对于每个右端点处理出以右端点为结尾最大长度使得从左端点开始的前缀等于以右端点结束的后缀,即next数组 然后一直往前跳,直到长度小于子串长度的一半为止。 阅读全文
posted @ 2016-08-11 15:25 Yangjiyuan 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 优先按照它说明的方法处理数组 然后为了让数列中尽可能多的出现小的数字 所以1是必须要出现的,这样才能使整个数列的排序后字典序最小。 我们思考,如果2也能在这个数列中那就最好不过了 但是2有可能不在这个数列里,就是2在走了1就不可能走的地方的话,就不能走2了。 所以从小到大枚举数字,如果当前数字能走, 阅读全文
posted @ 2016-08-11 15:23 Yangjiyuan 阅读(401) 评论(0) 推荐(0) 编辑
摘要: 每两个能互相攻击且能放置的点连一条双向边,然后跑二分图最大点独立集即可 阅读全文
posted @ 2016-08-11 15:21 Yangjiyuan 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 只要统计每一个左右分别有多少比他高的去min,然后求和 阅读全文
posted @ 2016-08-11 15:19 Yangjiyuan 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 首先,块的大小确定的话,可以发现方案最多只有1种 然后就可以O(nsqrt(n))搞,不过会TLE 接着我们又发现,一个节点可以作一个块的根,当且仅当该节点的size能被块的大小整除 然后就可以O(nlogn)搞了 阅读全文
posted @ 2016-08-11 15:16 Yangjiyuan 阅读(118) 评论(0) 推荐(0) 编辑
摘要: x*2^m==l (mod n+1)x=(n/2+1)^m*l mod n+1 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<cmath> #i 阅读全文
posted @ 2016-08-11 15:14 Yangjiyuan 阅读(384) 评论(0) 推荐(0) 编辑
摘要: 我们需要枚举根,然后从其子树内选尽量多的点,薪水不超过M,可是暴力复杂度不对。于是考虑自下而上合并树(开始每棵树内只有一个节点,就是自己) 每个树是一个堆,我们维护树的节点个数和薪水总和,合并时,不断弹出堆顶薪水最大的直到薪水总和不超过M,然后用领导力*节点个数更新答案。发现这个模型就是裸的左偏树。 阅读全文
posted @ 2016-08-11 15:12 Yangjiyuan 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 交了一发pb_ds 阅读全文
posted @ 2016-08-11 15:09 Yangjiyuan 阅读(137) 评论(0) 推荐(0) 编辑
摘要: sum= A*h+B*s排序 然后枚举height和speed的最小值 然后用两个指针:先枚举speed最小值,然后一边枚举v的最小值一边查询符合条件的人数。 阅读全文
posted @ 2016-08-11 15:08 Yangjiyuan 阅读(153) 评论(0) 推荐(0) 编辑