上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 26 下一页
摘要: 题意:对一个矩阵进行子矩阵操作。元素最多有1e6个,树套树不好开(我不会),把二维坐标化成一维的,一个子矩阵操作分解成多条线段的操作。一次操作的复杂度是RlogC,很容易找到极端的数据(OJ上实测没有),如果判断一下然后启发式建树复杂度是min(RlogC,ClogR)。代码中结点没有保存l和r,而... 阅读全文
posted @ 2015-09-07 23:02 陈瑞宇 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 此题最难处理的操作就是将一个单点改变集合,而普通的并查集是不支持这种操作的。当结点p是叶子结点的时候,直接pa[p] = root(q)是可以的,p没有子结点,这个操作对其它结点不会造成任何影响,而当p是父结点的时候这种操作会破坏子节点的路径,因此必须保留原来的路径。我们希望pa[p] = root... 阅读全文
posted @ 2015-09-07 22:49 陈瑞宇 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 从包含k个整数的k个数组中各选一个求和,在所有的和中选最小的k个值。思路是多路归并,对于两个长度为k的有序表按一定顺序选两个数字组成和,(B表已经有序)会形成n个有序表A1+B1比较,而现在需要同时合并n个有序表,优先队列(堆)就派上用场了。类似归并排序用i和j维护有序表当前考虑元素,合并的时候,每... 阅读全文
posted @ 2015-09-07 22:20 陈瑞宇 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 一个叫差分约束系统的东西。如果每个点定义一个顶标x(v),x(t)-x(s)将对应着s-t的最短路径。比如说w+a≤b,那么可以画一条a到b的有向边,权值为w,同样地给出b+w2≤c,a+w3≤c。那么a到c的最大差就受这些不等式约束,对应着图中的最短路。这个边多,不要用vector存,满了以后重新... 阅读全文
posted @ 2015-09-06 09:45 陈瑞宇 阅读(203) 评论(2) 推荐(0) 编辑
摘要: 不错的树形dp。一个结点能走多次,树形的最大特点是到达后继的路径是唯一的,那个如果一个结点无法往子结点走,那么子结点就不用考虑了。有的结点不能走完它的子结点,而有的可能走完他的子节点以后还会剩下一些点数。影响走的次数的是当前结点的点数,因为往子结点走是一定要回来的,进入这个结点要花费这个结点一个点数... 阅读全文
posted @ 2015-09-06 08:51 陈瑞宇 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 模拟题,map搞一搞。要想清楚一个结点应该是要通过一个字符串找到下一个结点,题目保证所以文件夹非空,所以只要判断一个结点是不是叶子结点就可以判断它是不是文件,用了点c11的特性。#includeusing namespace std;typedef map Node;map::iterator it... 阅读全文
posted @ 2015-09-05 23:09 陈瑞宇 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 线段树区间更新维护最小值。。。记得下放标记。。。如果线段树上的一个完整区间被修改,那么最小值和最大值增加相应的值后不变,会改变是因为一部分改变而另外一部分没有改变所以维护一下就好。询问的时候也要记得下放标记。。。数据结构快忘了,贴个板。#includeusing namespace std;type... 阅读全文
posted @ 2015-09-05 19:55 陈瑞宇 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 每个加油的站可以确定一个alpha的上下界,比如,第i次加油站a[i],前面加了i次油,a[i]*10≤ alpha*i using namespace std;typedef long long ll;ll gcd(ll a,ll b) { return b?gcd(b,a%b):a; }stru... 阅读全文
posted @ 2015-09-05 17:47 陈瑞宇 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 问题是求一个方案,实际隐含一个dp。法力是递减的,所以状态是DAG,对于一个确定的状态,我们贪心地希望英雄的血量尽量大。分析:定义状态dp[i][p][h]表示是已经用了i的法力值,怪兽的位置在p,怪兽的总血量为h时候英雄所具有的最大血量,采用刷表法,决策有:使用雷击,h变成h-L[p],p变成ma... 阅读全文
posted @ 2015-09-04 23:03 陈瑞宇 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 其实挺简单的。先直接算出之前已经排在k这个数前面的数字。比如543是三位的,那么100~543都是可以的,两位的10~54。如果还需要往前面补的话,那么依次考虑1000~5430,5430是上界不能选,10000~54300。有一种情况样例4是10000~10000,,这样是不会增加的应该输出'0'... 阅读全文
posted @ 2015-09-04 21:35 陈瑞宇 阅读(410) 评论(0) 推荐(0) 编辑
摘要: 二分法+spfa判负环。如果存在一个环sum(wi)using namespace std;const int maxn = 51;struct Edge{ int v,nxt; double w;};vector edges;int head[maxn];#define PB push... 阅读全文
posted @ 2015-09-04 10:37 陈瑞宇 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 从终点逆推,d[u]表示进入u以后剩下的货物,那么进入u之前的货物数量设为y,d[u] = x,那么y-x=ceil(y/20.0)=(y-1)/20+1=(y+19)/20。(y-x)*20+r=y+19,0≤r≤19,即19*y=20*x+r,根据题意y应该尽量小,x的部分是不能变动的,所以y=... 阅读全文
posted @ 2015-09-03 21:41 陈瑞宇 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 题意:在连通图中,求一条边使得加入这条边以后的消除的桥尽量多。在同一个边双连通分量内加边肯定不会消除桥的,求边双连通分量以后缩点,把桥当成边,实际上是要选一条最长的链。缩点以后会形成一颗树,一定不存在环否则和桥的定义矛盾,求树上的最远点对。树上的最远点对用dp TLE了,实际上两次dfs就行了,第一... 阅读全文
posted @ 2015-09-03 18:33 陈瑞宇 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 预处理+暴力,每个颜色都是独立的,求个前缀和,减一减判断一个在区间内颜色是否存在。算了算复杂度好像有点勉强,但是还是过了,学了主席树以后用主席树在做一下#includeusing namespace std;const int maxn = 1e4+4;const int maxm = 256;in... 阅读全文
posted @ 2015-09-03 18:25 陈瑞宇 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 打个表找找规律,到24445的时候乘2以后产生了0出现循环。一般地,判断循环节是否存在可以用Floyd判圈算法。#includeusing namespace std;typedef long long ll;int ans[]{-1,1,2,4,8,16,23,46,29,58,116,223,4... 阅读全文
posted @ 2015-09-03 18:20 陈瑞宇 阅读(216) 评论(2) 推荐(0) 编辑
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 26 下一页