上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 26 下一页
摘要: 很多的边会被删掉,需要排除一些干扰进行优化。和UVA - 1279 Asteroid Rangers类似,本题最关键的地方在于,对于一个单源的最短路径来说,如果最短路树上的边没有改变的话,那么最短路肯定是不会变的,所以只要枚举删掉最短路树上的边。这样的时间复杂度就能过了。#includeusing ... 阅读全文
posted @ 2015-09-02 23:50 陈瑞宇 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 求出家到其他点的最短路径,题目的条件变成了u->v不是回头路等价于d[u]>d[v]。然后根据这个条件建DAG图,跑dp统计方案数,dp[u] = sum(dp[v])。#includeusing namespace std;const int maxn = 1001, maxm = 2002;st... 阅读全文
posted @ 2015-09-02 18:47 陈瑞宇 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 题目只有一条路径会发生改变。常见的思路,预处理出S和T的两个单源最短路,然后枚举商业线,商业线两端一定是选择到s和t的最短路。路径输出可以在求最短路的同时保存pa数组得到一棵最短路树,也可以用dist数组检查。#includeusing namespace std;const int maxn = ... 阅读全文
posted @ 2015-09-02 10:20 陈瑞宇 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 用布尔变量表示状态,把限制条件转化为XνY的形式以后跑2SAT,根据变量取值输出方案。#includeusing namespace std;const int maxn = 1e5+5;#define PB push_backbool vis[maxn*2];vector G[maxn*2];in... 阅读全文
posted @ 2015-09-02 08:37 陈瑞宇 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 题目的要求一个最小值最大,二分即可,但是怎么判断呢?飞机早或者晚两种状态,可以用一个布尔变量表示,假设当前猜测为m,那么根据题意,如果x和y所对应的时间冲突那么就是¬(xΛy)化成或的形式(¬x)V(¬y),就可以套用twoSAT了。关于2-SAT,简单理解是,把逻辑推导变成一条有向边,然后跑图判断... 阅读全文
posted @ 2015-09-02 00:23 陈瑞宇 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 给出一个有向图,求一个最大的结点集合,任意两个点u,v。u可到达v或v可到达u。一个强连通分量肯定一起选的。而且只能在一条路径上。所以先找出所有scc,然后缩点找一条最大权的路径,按拓扑序跑DAG上的dp。注意0,0这组数据#includeusing namespace std;const int ... 阅读全文
posted @ 2015-09-01 22:45 陈瑞宇 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 把证明的关系看出一张图,最终就是要所有的点都在至少一个环中。环的判断和度数有关。用tarjan找强连通分量,在一个强连通分量点已经等价缩点以后形成一个DAG,计算入度为0的点数a,出度为0的b,取其中大的一个。特判强连通分量数为1的情况。看懂tarjan算法以后还是比较简单的#includeusin... 阅读全文
posted @ 2015-09-01 21:38 陈瑞宇 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 补题,逆序考虑每个询问的时间,这样每次就变成出现新岛屿,然后用并查集合并统计。fa = -1表示没出现。以前写过,但是几乎忘了,而且以前写得好丑的,虽然常数比较小,现在重新写练练手。每个单词后面都要加空格不然PE#includeusing namespace std;const int maxn =... 阅读全文
posted @ 2015-09-01 19:45 陈瑞宇 阅读(353) 评论(0) 推荐(0) 编辑
摘要: 题意:在一颗树上要求一个到其他结点容量和最大的点,i,j之前的容量定义为i到j的路径上的最小边容量。一开始想过由小到大的去分割边,但是很难实现,其实换个顺序就很容易做了,类似kruskal的一个贪心算法,从大到小的连边,每次连通两个分量A和B,这样可以新边容量一定是两个分量相互到达的最小容量,其余边... 阅读全文
posted @ 2015-09-01 18:05 陈瑞宇 阅读(407) 评论(0) 推荐(0) 编辑
摘要: 题意比较坑,移动完以后的士兵不能再次移动,不然样例都过不了。。。最小值最大满足决策单调性所以二分答案,跑网络流验证是否可行。这种题重点在建图,为了保证只移动一次,拆点,一个入点一个出点,到了出点的自然不能再次调度。不在边界上的边连一条容量为1的边表示至少留一个人,在边界上的与T的连边就设置成mid。... 阅读全文
posted @ 2015-09-01 12:57 陈瑞宇 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 用树状数组动态和查询修改排名。树状数组可以很方便地查询前缀和,那么可以利用这一特点,记录一个点在树状数组里最后一次出现的位置,查询出这个位置,就可以知道这个点的排名了。更改这个点的排名的时候只要把原来位置修改成0,然后在新的位置加上1就行了。把询问离线,数据范围比较大,先用快排+去重离散(用map也... 阅读全文
posted @ 2015-08-30 16:29 陈瑞宇 阅读(423) 评论(1) 推荐(0) 编辑
摘要: 3e7暴力,800ms+过,单调队列维护区间最小值。#includeusing namespace std;typedef long long ll;const int maxn = 3e7+5;int x[maxn], dq[maxn], pos[maxn];int main(){ freo... 阅读全文
posted @ 2015-08-30 15:15 陈瑞宇 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 题意读懂了就好做了,就是求一下点双连通分量。维护一下一颗子树的结点数,对于一个结点当u是割点的时候,统计一下u分割的连通分量v,每得到一个连通分量的结点数cnt(v)和之前连通分量结点数sum相乘一下就好。最后加一下和u的子树上的连通分量总数和其它的结点的乘积。B,C中其中一者可以是A,所有最后还要... 阅读全文
posted @ 2015-08-30 15:05 陈瑞宇 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 这道题挺像hdu 5093 Battle ships的,不过那道题是要求最多放置的点数,而这道题是要求最小点覆盖。顶点覆盖的定义是:在G中任意边至少有一个端点属于顶点集合S。一个重要的位置有(x,y)两个坐标,而要守住这个这个位置就是相当于连了一条边x到y的边。选了一个(x,y)就相当于选了所有相同... 阅读全文
posted @ 2015-08-30 10:31 陈瑞宇 阅读(616) 评论(3) 推荐(0) 编辑
摘要: 不难发现在一次操作以后,hi=min(hi-1,hi-1,hi+1),迭代这个式子得到k次操作以后hi=min(hi-j-(k-j),hi-k,hi+j-(k-j)),j = 1,2,3...当k == min(hi-j+j,hi+j+j)时hi会变成0,因为min具有传递性,那么可以左右分开来考虑... 阅读全文
posted @ 2015-08-30 10:17 陈瑞宇 阅读(229) 评论(0) 推荐(0) 编辑
上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 26 下一页