自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(294)
  • 收藏
  • 关注

转载 2019ICPC上海网络赛A 边分治+线段树

题目:给定一棵树, 带边权。现在有2种操作:1.修改第i条边的权值。2.询问u到其他一个任意点的最大距离是多少。解法:边分治+线段树首先我们将所有的点修改和边修改都存在对应的边里面。然后接下来就是边分治的过程。对于边分治的一层来说,以这条边为界分割出来。设这条边为 x, y, w我们把这层图上所有的边修改, 点询问都拿出来, 按照修改时间排序...

2019-09-16 14:04:00 221

转载 模板汇总 —— 杨式图表

HDU - 6642使用范围:求k个不相交的子序列最大值之和。用法:开k个map, 每次对于新的一个v,我们插入 v 个 v 到第一层中。插入方式:1.如果没有数比这个v大, 我们就直接将v放入到该层。2.否则大于v的最小的数x,用v来替换x,将x插入下一层。因为不能一个一个插入,所以用map来一起插入。最后答案就是所有表内的元素个数之和。复杂度为...

2019-08-13 16:17:00 319

转载 HDU 6634 网络流最小割模型 启发式合并

如果我们先手拿完所有苹果再去考虑花费的话。S -> 摄像头 -> 苹果 -> T就相当于找到一个最小割使得S和T分开。ans = sum - flow。然后对于这一个模型, 我们可以不用网络流去解决。我们从叶子出发,然后从下往上合并。每次到一个节点的时候,我们先把摄像机所对应的影响去除。然后把这个点的剩下流量传给父亲。代码:...

2019-08-13 13:39:00 256

转载 网络流 从0开始学建图

1.HDU-3572题意:N个任务,每个任务有Pi(需要干多少天),Si(开始时间),Ei(结束时间),M个机器,一个机器一天最多处理一个任务,询问是否所有的任务都能完成。建图模型:s 向 [1, 500]天开始建立一条流量为m的边,然后对于每天来说,往可以去执行任务的点建立一条流量为1的边,每个任务往 t 建立一条流量为Pi的边。最后判断最大流和sum Pi是否相等。...

2019-08-04 20:46:00 128

转载 分层图 单调决策性DP

easy 写法。#include<bits/stdc++.h>using namespace std;#define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);#define LL long long#define ULL unsigned LL#def...

2019-08-04 16:21:00 131

转载 模板汇总——笛卡尔树

笛卡尔树O(n)建立一颗该节点是当前子树的最值的二叉树.代码:void Build(){ int n; scanf("%d", &n); for(int i = 1; i <= n; ++i) scanf("%d", &a[i]), L[i] = R[i] = 0; top = 0; for...

2019-07-28 20:39:00 68

转载 Bzoj 2127 happiness 最小割

happiness题解:将图转换成最小割.将割完的图中与S相连的点看做选文科, 与T相连的点看做选理科.flow(s, u) = 文科值flow(u,t) = 理科值假设u 和 v 一起选文科有奖励值z, flow(s,u) = z/2 flow(s,v) = z/2, flow(u,v) = z/2假设u 和 v 一起选理科有奖励值z, flow(u,...

2019-07-27 10:14:00 113

转载 manacher --- 暂 旧版本

  #include<bits/stdc++.h>using namespace std;const int N = 110010;char str[N], aim[N<<1];int n;int len[N*2];void manacher(){ memset(len, 0, sizeof(len)); ...

2019-07-15 19:51:00 71

转载 Bzoj 3730 震波 动态点分治

Bzoj 3730 震波题解:和在线的边分治差不多。 就是将每层都信息都存下来。然后对于每一层记录上一层的重心是哪个。对于求和的话, 从自己的那层出发,然后暴力往上爬, 然后计算答案。对于修改来说,也暴力的往上爬,对于每层所对应的信息来修改用树状数组来统计同一层、不同深度的前缀和。本来想用线段树,然后TLE了,非常卡。然后用另一颗树状数组来容斥...

2019-07-10 16:36:00 124

转载 HDU - 3038 How Many Answers Are Wrong 并查集

How Many Answers Are Wrong题解:emm。先说一点,这个题目是多组的, 但是我没在题目中看到多组的信息。然后并查集+前缀和的一个思想。定义: f(x) = pre[x], S[i] = S[i-1] + a[i]则 sum[x] = S[x] - S[f(x)]。每次输入l, r, x的时候, 代表 S[r] - S[l-1] =...

2019-07-08 10:01:00 72

转载 P1525 关押罪犯 并查集

P1525 关押罪犯题解:  一拿到题目想到的是二分 + 奇奇怪怪的操作。后来学到了并查集裸写就好了。先将边权按大到小排序一边。然后访问到一个边的时候。先看一下这2个边有没有联通, 如果有联通就是说明在同一个块内, 输出这条边的权值作为答案。否则 互相连到对方的敌人哪里。代码:#include<bits/stdc++.h>usi...

2019-07-07 19:50:00 97

转载 技巧汇总

1. 修改set里面的非键值。用mutable来修饰这个非键值。举例代码:#include<bits/stdc++.h>using namespace std;#define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);#define LL long lo...

2019-07-07 09:35:00 91

转载 模板汇总——treap

1. 旋转treap。思想:一颗权值BST + 一颗 随机数 最小堆。BZOJ - 3224代码:#include<bits/stdc++.h>using namespace std;#define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);#def...

2019-07-06 13:17:00 84

转载 差分约束

1.求最小值的情况。将关系都化成 a[ i ] - a[ j ] >= k然后 j 向 i 建立一个价值k的有向边。然后跑一个最长路。例如:POJ-1201#include<iostream>#include<cstring>#include<queue>#include<vector>#i...

2019-07-04 15:31:00 72

转载 HDU - 6126 Give out candies

Give out candies题解:第一次遇见这样处理的网络流模型。将问题转换成最小割问题。具体的题解参考自:传送门先将每个人的拆成m个人。然后s向第1人连边流量为inf。第i个人向第i+1个人连边,流量为 3000 - w。 将t视为每组的第m+1个人。接来下是约束关系的建边, x, y ,z。如果x小朋友拿了j个糖果,则y小朋友拿的糖果至少为y-z。...

2019-07-04 10:11:00 165

转载 CodeForces 522C Chicken or Fish?

Chicken or Fish?题意比较难理解。需要注意的是 就算某个人抱怨了 但是的t[i]也是他最后选择的结果。题解:首先考虑没有r[i] = 1的情况。 直接记录t[i]=0的数目,最后输出的时候比较a[i]和跳过的人的大小。其次如果存在r[i]=1的情况, 则说明在前面就有一个菜品是被选完了。 再明白的后面出现的菜品在这个点是不会被选完的。...

2019-07-03 16:07:00 167

转载 CodeForces 812E Sagheer and Apple Tree 树上nim

Sagheer and Apple Tree题解:先分析一下, 如果只看叶子层的话。那么就相当于 经典的石子问题 nim 博弈了。那我们看非叶子层。看叶子层的父亲层。我们可以发现, 如果从这一层移动x个苹果到叶子,那么另一个人就可以吃掉这x个苹果。 不影响任何的前后手。然后我们再分析,叶子层父亲的父亲。如果从这里移动到下一层,就相当于是吃掉了这x个苹果。因为就...

2019-07-03 14:01:00 132

转载 CodeForces 855E Salazar Slytherin's Locket

Salazar Slytherin's Locket题解:数位DP。对于不同的进制直接数位DP就好了。在数位dp中比较基础。通过状压来xor值,使得表示每个数字出现奇数次/偶数次.注意的就是 去除 00 0000 这些数的影响。代码:#include<bits/stdc++.h>using namespace std;#defi...

2019-07-03 09:36:00 139

转载 CodeForces 283C World Eater Brothers

World Eater Brothers题解:树DP, 枚举每2个点作为国家。 然后计算出最小的答案。首先我们枚举根, 枚举根了之后, 我们算出每个点的子树内部和谐之后的值是多少。这样val[root]就是这个root为根的花费。然后我们再fdfs一遍这棵树。假如我们枚举u这个点是另一个国家,则花费就是1. root --- u 的路径上 保证路径上的点可...

2019-07-02 10:04:00 91

转载 CodeForces 1187G Gang Up 费用流

题解:先按时间轴将一个点拆成100个点。 第一个点相当于第一秒, 第二个点相当于第二秒。在这些点之间连边, 每1流量的费用为c。再将图上的边也拆开。将 u_i 向 v_i+1 建边。将 v_i 向 u_i+1 建边。在上面的建边过程中:假设最多一条路只会走20个人。将这个东西拆成20条边。第i条的流量为1, 费用为 c + ( i*i - (i-1)...

2019-07-01 14:10:00 113

转载 CodeForces 903E Swapping Characters

Swapping Characters题解:先算出其他串和第一个串的字母个数是否相同。再算出其他串和第一个串不同的字母位置个数。然后枚举第一个串交换的位置。计算交换之后的不同字母的位置个数。如果个数为0,则至少有2个相同的字母。如果个数为2,则说明交换那2个位置之后可以相同。代码:#include<bits/stdc++.h>...

2019-07-01 09:22:00 122

转载 CodeForces 821D Okabe and City

Okabe and City题解:将行和列也视为一个点。 然后从普通的点走到行/列的点的话,就代表这行/列已经被点亮了。然后将费用为0的点建上边。注意讨论(n,m)非亮的情况下。代码:#include<bits/stdc++.h>using namespace std;#define Fopen freopen("_in.txt","r...

2019-06-30 17:55:00 71

转载 CodeForces 620D Professor GukiZ and Two Arrays 双指针

Professor GukiZ and Two Arrays题解:将a数组都sort一遍之后, b数组也sort一遍之后。可以观察得到 对于每一个ai来说, 整个数组bi是一个V型的。并且对于ai+1的最优解一定是在ai的右边。然后我们将a数组 和 b数组枚举一遍。然后再将a数组22组合, b数组22组合之后, 再枚举一遍。代码:#inclu...

2019-05-24 10:49:00 115

转载 模板汇总 —— 最大团

代码:int e[50][50];int cnt[N], group[N], sta[N], ans;int n;bool dfs(int u, int deep){ for(int i = u + 1; i <= n; ++i){ if(cnt[i] + deep <= ans) return 0; if...

2019-05-24 09:47:00 79

转载 CodeForces 1105E Helping Hiasat 最大独立集

Helping Hiasat  题解:如果我们把连续的2出现的人都相互连边的话, 题目就是问最大独立集的答案是多少。求最大独立集可以将图变成反图, 然后求最大团。代码:#include<bits/stdc++.h>using namespace std;#define Fopen freopen("_in.txt","r",stdin...

2019-05-24 09:40:00 88

转载 CodeForces 925 C Big Secret

Big Secret题解:若 cur ^ x > cur 则 x2进制下最高位的1 所对应cur的那个位置是0, 否则数字一定变小。我们可以将每个数的最高位找出来。然后我们从低位去check某位是不是0。虽然对于每个数来说都只要考虑最高位就好了, 但是相对的最高位会影响比他低位置的数, 低位不会影响高位, 所以先填低位。代码:#includ...

2019-05-22 16:06:00 112

转载 CodeForces 979 D Kuro and GCD and XOR and SUM

Kuro and GCD and XOR and SUM题解:对于每个值先找到所有的因子。然后每次add的时候,在他的所有因子都加入这个数。然后询问的时候询问这个数的因子所构成的字典树。代码:#include<bits/stdc++.h>using namespace std;#define Fopen freopen("_in....

2019-05-22 13:02:00 106

转载 CodeForces 665E Beautiful Subarrays 字典树

Beautiful Subarrays  题解:把数字转化成2进制之后,用字典树去维护。想到字典树之后就应该是一道很容易写的题目了。代码:#include<bits/stdc++.h>using namespace std;#define Fopen freopen("_in.txt","r",stdin); freopen(...

2019-05-20 16:36:00 85

转载 CodeForces 723F st-Spanning Tree

st-Spanning Tree题解:将除了s, t以外的点相联通的点缩成一个点。然后将将这些点和分类,1. 只和s相连, 2 只和t相连 3.同时和s, t相连。对于1 2来说将他们都连到对应的点上去。对于3来说,则是能连s就连s, 能连t就连t。为了保证s, t联通, 我们将第3种点的第一个和s t相连。 (注意处理 s与t直接相连的情况)。...

2019-05-19 17:34:00 80

转载 CodeForces 103D Time to Raid Cowavans 询问分块

Time to Raid Cowavans  题意:询问 下标满足 a + b * k 的和是多少。题解:将询问分块。将b >= blo直接算出答案。否则存下来。存下来之后,对于每个b扫一遍数组,然后同时处理相同b的询问。代码:#include<bits/stdc++.h>using namespace std;...

2019-05-18 16:20:00 109

转载 CodeForces 809B Glad to see you!

Glad to see you!题解:交互题一般都是需要用二分去完成。在二分时候每次检查左边和右边哪边会和答案更近, 然后在更近的那段新区间去重复检查, 知道区间长度为1。在检查的时候,可以使得答案更近贴近于左边,或者右边。代码:#include<bits/stdc++.h>using namespace std;#define ...

2019-05-18 15:27:00 79

转载 CodeForces 223C Partial Sums 多次前缀和

Partial Sums题解:一个数列多次前缀和之后, 对于第i个数来说他的答案就是for(int i = 1; i <= n; ++i){ for(int j = 1; j <= i; ++j){ b[i] = (b[i] + 1ll * a[j] * C(k-1+j-i,j-i)) % mod;...

2019-05-18 14:14:00 240

转载 CodeForces 346C Number Transformation II

Number Transformation II题解:对于操作2来说, a - a % x[i] 就会到左边离a最近的x[i]的倍数。也就是说 [ k * x[i] + 1, (k+1)* x[i] -1 ]这段区间的的数都会走到 k * x[i]上。所以对于每个位置都先计算出他到右边最远的覆盖位置。然后在反着求出每个位置能往左走走到的最远的位置。代码:...

2019-05-18 12:47:00 119

转载 CodeForces 639C Bear and Polynomials

Bear and Polynomials题解:如果改变一个其中的一个数,那么需要知道的是,前面的数都可以进到当前位来,如果过不来的话,那么就会因为前面有数导致无法变成0。所以我们将前面的数不断向高位转移,找到第一个不能往上进位的位置, p。现在只有在0 <= i <= p 的时候才有解。然后我们从高位到地位转移系数。然后到0 <= i...

2019-05-18 10:45:00 124

转载 CodeForces 149E Martian Strings exkmp

Martian Strings题解:对于询问串, 我们可以从前往后先跑一遍exkmp。然后在倒过来,从后往前跑一遍exkmp。我们就可以记录下 对于每个正向匹配来说,最左边的点在哪里。对于每个反向匹配来说,最右边的点在哪里。然后判断可不可以构成这个串就好了。代码:#include<bits/stdc++.h>using ...

2019-05-17 17:28:00 132

转载 CodeForces 85D Sum of Medians Splay | 线段树

Sum of Medians题解:对于这个题目,先想到是建立5棵Splay,然后每次更新把后面一段区间的树切下来,然后再转圈圈把切下来的树和别的树合并。但是感觉写起来太麻烦就放弃了。建立5棵线段树。然后 seg[rt][i]代表的是只考虑当前所管辖的区间中的情况下, 下标对5取余之后为 i 的那些值的和。最重要的一点是更新。for(int i ...

2019-05-17 16:39:00 82

转载 CodeForces 149D Coloring Brackets

Coloring Brackets题解:dp[ l ] [ r ] [ lc ] [ rc ]代表的是第在区间[ l , r] 的情况下 左端点颜色是lc, 右端点颜色是rc的方案数是多少。然后记忆化DP。将一个序列拆成一个个匹配的序列。为了防止一开始序列不匹配,所以从2个虚拟的地方开始计算。代码:#include<bits/...

2019-05-17 14:29:00 62

转载 CodeForces 526D Om Nom and Necklace

Om Nom and Necklace题意:询问每个前缀是否能构成A + B + A + ...+ B + A这个形式。题解:首先要明白的是KMP求最小循环节,然后算出前面有多少个重复的串。一个串有2种构成方式:1. SSSSSS, 及这个串刚好是全由S构成的的,一共z个S。 需要明白的是,因为有k个AB, 所以z%k之后,就是剩下A的个数, 然后判断一下B...

2019-05-16 23:43:00 143

转载 CodeForces 875 D High Cry

High Cry题解:把思路转换成总-非法方案数。对于第i个点来说 找到L[i], R[i] 然后 对于所有的在[ L[i], R[i] ] 的值都 < a[i],然后对于第i个点来说 在 [L[i], i]这段区间中找到最大的x使得 a[x] | a[x+1] | ... | a[i] > a[i]同样在[i, R[i]]这段区间中找到最小的y使得 a...

2019-05-16 17:47:00 112

转载 CodeForces 1018B The hat

The hat题解:定义d[i]为第i个数和他对面的差值。然后我们可以发现d[i]和d[i+1]的差值只会有3种情况2, -2, 0。并且可以知道 d[i] = - d[i+n/2]所以如果一开始n = 4 * k 即 d[1] 是偶数的话, 一定有d[i] = 0的情况。如果d[l] > 0 && d[r] < 0 那么中间一定...

2019-05-16 11:43:00 104

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除