12 2018 档案
摘要:A:Vasya And Password 代码: #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout); #def
阅读全文
摘要:ittle w and Discretization 主席树维护Mex。 每个右端点 r 维护出一棵 在[1, r ] 区间中 其他所有的 值离这个 r 最近的的位置是多少。 然后询问区间[L,R]的时候,从rt[R] 出发,然后如果左儿子的中所有出线位置的最小值 >= L, 则说明他们所有的点都出
阅读全文
摘要:A:Cashier 题意:问可以休息多少次。 代码: #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout); #d
阅读全文
摘要:The Fair Nut and Rectangles 题意:有n个矩形,然后你可以选择k个矩形,选择一个矩形需要支付代价 ai, 问 总面积- 总支付代价 最大能是多少, 保证没有矩形套矩形。 题解: sort 一下 只有 x 会递增 y 递减 然后 f[i] = f[j] + (x[i]-x[j
阅读全文
摘要:Max Mex 题意:问在树上的所有路中mex值最大是多少。 题解: 用线段树维护值。 区间[L,R]意味着 区间[L,R]的数可不可以合并。 重点就是合并的问题了。 首先合法的区间只有3种: 1. 一个点。 2. 一条从上到下的线段 即 u->v u = lca(u,v)。 3.一条从下到上到下的
阅读全文
摘要:A:The Fair Nut and Elevator 题意:问电梯放在那一层的花费最小。 代码: #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt","r",stdin); freopen("_o
阅读全文
摘要:The Fair Nut and the Best Path 题意:求路径上的 点权和 - 边权和 最大, 然后不能存在某个点为负数。 题解: dfs一遍, 求所有儿子走到这个点的最大值和次大值。 我们需要明白如果可以从u -> v 那么一定可以从 v -> u, 当然 指的是 u->v是路径上的最
阅读全文
摘要:1. 单向边 + 新图建边 int belong[N], dfn[N], low[N], now_time, scc_cnt; stack<int> s; void dfs(int u){ dfn[u] = low[u] = ++now_time; s.push(u); for(int i = he
阅读全文
摘要:题目传送门 题解:强连通锁点之后。 就成了一副单向图。 然后对于每个点 找到 后面合法的点的最大值就好了。 合法就是后面的那个点可以走到n号点。 也可以正向跑一遍dij 求出到这个点的最小花费。 然后在反向跑dij跑出n到这个点的最大花费,然后枚举每个点。 代码: #include<bits/std
阅读全文
摘要:题目传送门 题意:有n个点, p条路,每条道路有个花费Li, 然后现在要建一条1-n的路线,然后可以选k条道路免费, 然后可以在剩下的道路中选择价格最高的边支付费用, 求这个答案最小。 题解: 二分答案。 每次check过程中, 一条边的花费 <= mid 则 路径长度为0,否者路径长度为1。然后
阅读全文
摘要:题目传送门 f[i] = min(f[j] + val(i,j); 其中val(i,j) 满足 四边形dp策略。 代码: #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt","r",stdin);
阅读全文
摘要:A:Ehab and another construction problem #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w
阅读全文
摘要:题目传送门 题意:现在有n座山峰,现在 i-1 与 i 座山峰有 di长的路,现在有m个宠物, 分别在hi座山峰,第ti秒之后可以被带走,现在有p个人,每个人会从1号山峰走到n号山峰,速度1m/s。现在你可以安排好这p个人的出发时间,问所有宠物的等待时间是多少。 题解: 斜率优化DP 我们知道一个人
阅读全文
摘要:这个题目中 斜率优化DP相当于存在一个 y = kx + z 然后给定 n 个对点 (x,y) 然后给你一个k, 要求你维护出这个z最小是多少。 那么对于给定的点来说 我们可以维护出一个下凸壳,因为如果存在一个上突壳的话,那么上突壳的点是一定不会被选上的。 所以对于解来说,只有下凸壳的点再会被选到。
阅读全文
摘要:题目传送门 题意:现在有一个图,选择一条边,会把边的2个顶点也选起来,最后会的到一个边的集合 和一个点的集合 , 求边的集合 - 点的集合最大是多少。 题解:裸的最大权闭合子图。 代码: #include<bits/stdc++.h> using namespace std; #define Fop
阅读全文
摘要:题目传送门 题意:现在有n个电话号码,每个电话号码为si,拨打次数为pi。 现在有k 个快捷键,每次拨打号码之前可以先按一次快捷键,然后再输入数字,现在问输入数字次数是多少。快捷键的号码可以不在电话簿上。 题解: 先构建一个字典树,然后在字典树上进行DP。 dp[x][rem][fa] x -> 节
阅读全文
摘要:题目传送门 题意:给你n个数和一个c, 现在有一个操作可以使得 [ l, r ]区间里的所有数都加上某一个值, 现在问你c最多可以是多少。 题解: pre[i] 代表的是 [1,i] 中 c 的个数是多少。 suf[i] 代表的是 [i,n] 中 c 的个数是多少。 我们可以处理出这些信息。 然后我
阅读全文
摘要:题目传送门 题意:现在有n个点,每个点的度数最大为di,现在要求你构成一棵树,求直径最长。 题解:把所有度数为2的点先扣出来,这些就是这颗树的主干,也就是最长的距离。 然后我们把度数为2的点连起来,之后就处理1的点,先在主干的最左边和最右边加上新的点,这样可以使得直径边长。 然后其他的点随便放就好了
阅读全文
摘要:01: #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout); #define LL long long #def
阅读全文

浙公网安备 33010602011771号