
数据结构
Frods
这个作者很懒,什么都没留下…
展开
-
[ZJOI2007]矩阵游戏 二分图匈牙利算法
题意:给定01矩阵,可以行列交换,问是否可以使左上到右下的一条对角线全为1。 分析:匈牙利算法,把每个数的行列连一条边,看能否全部匹配。 注意:匈牙利算法dfs里面要dfs(match[i])。#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;const int原创 2017-01-01 22:10:48 · 404 阅读 · 0 评论 -
WC2016 挑战NPC -一般图匹配
题目:有 n 个球,用整数 1 到 n 编号。还有m 个筐子,用整数 1 到 m 编号。每个筐子最多能装 3 个球。每个球只能放进特定的筐子中。具体有 e 个条件,第 i 个条件用两个整数vi 和 ui 描述,表示编号为 vi 的球可以放进编号为 ui 的筐子中。每个球都必须放进一个筐子中。如果一个筐子内有不超过 1 个球,那么我们称这样的筐子为半空的。求半空的筐子最多有多少个,以及在最优方案中,原创 2017-01-24 10:31:38 · 513 阅读 · 0 评论 -
bzoj3110[ZJOI2013]K大数查询 树套树
题目描述有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。输入输出格式输入格式: 第一行N,M接下来M行,每行形如1 a b c或2 a b c输出格式: 输出每个询问的结果 输入输出样例输入样例#1: 2 5 1 1 2 1 1 1 2 2原创 2017-02-12 15:30:51 · 608 阅读 · 4 评论 -
[NOI2014魔法森林]LCT
题目:为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士。魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为 1…n1…n,边标号为1…m1…m。初始时小E同学在 11 号节点,隐士则住在 nn 号节点。小E需要通过这一片魔法森林,才能够拜访到隐士。魔法森林中居住了一些妖怪。每当有人经过一条边的时候,这条边上的妖怪就会对其发起攻击。幸运的是,在 11 号节点住着两种守护精灵原创 2017-01-19 19:18:32 · 481 阅读 · 0 评论 -
[SDOI2011染色]树链剖分
题意:将路径上的点全部变成c询问路径上的颜色段数。树链剖分:维护一下颜色段数,左端颜色,右端颜色,注意询问的时候要push_down(),还有合并时要注意判断,而不是简单的直接相加。#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<vector>#define lc o<<1#de原创 2017-01-18 19:54:54 · 333 阅读 · 0 评论 -
网络流-最大流&最小费用最大流
isap递归版 最大流#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;int isap(int x,int flow){ if(x==t) return flow; int res=flow; for(int i=1;i<=n;i++)if原创 2016-12-28 21:03:26 · 410 阅读 · 2 评论 -
[ZJOI2008树的计算]树链剖分
题目:I. CHANGE u t : 把结点u的权值改为tII. QMAX u v: 询问从点u到点v的路径上的节点的最大权值III. QSUM u v: 询问从点u到点v的路径上的节点的权值和注意:从点u到点v的路径上的节点包括u和v本身#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using name原创 2017-01-16 17:14:26 · 293 阅读 · 0 评论 -
[模板]带花树算法(一般图最大匹配)
->什么是增广路增广路:长度为奇数,第一条和最后一条边都是未匹配的边,增光路径是一条匹配边,一条未匹配边这样交错的路径,也叫做交错路->带花树的做法像匈牙利算法那样不断枚举点寻找增广路,当找到环时,找到u和v的最近公共祖先,分别从u和v跑到最近公共祖先的过程中,把环里面的边从有向变成无向的,并把环中点的所在集合都设为root。#include<cstdio>#include<algorit原创 2017-01-15 20:27:25 · 901 阅读 · 3 评论 -
UOJ164 V 线段树lazytag维护历史最值
题意:维护一列数,支持: 1.区间加A 2.区间减A,减法结束后每个位置与0取max 3.区间覆盖成A 4.询问单点当前值 5.询问单点历史最值线段树lazytag维护历史最值,要记录四个数组,注意转移以及初始条件。#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace s原创 2017-01-15 20:10:16 · 952 阅读 · 0 评论 -
线段树 [AHOI2011维护序列]
题意:对一串序列有如下操作。 1.将某个区间的每个数都加上某个数 2.将某个区间的每个数乘上某个数 3.询问区间和 做法:线段树,维护时记录三个数组,一起下传。#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;typedef long原创 2016-12-24 17:25:43 · 416 阅读 · 1 评论 -
Splay [ZJOI2012网络]
题意:一个网络支持一下操作:修改一个节点的权值。修改一条边的颜色。查询由颜色c的边构成的图中,所有可能在节点u到节点v之间的简单路径上的节点的权值的最大值。做法:对于每一种颜色,用一棵Splay维护最大值即可。注意:rotate请不要打错(grandfa的儿子要另外判断左右)。#include<cstdio>#include<algorithm>#include<cstring>#in原创 2016-12-22 21:20:22 · 428 阅读 · 0 评论 -
[ZJOI2006书架]Splay
题目描述小T有一个很大的书柜。这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列。她用1到n的正整数给每本书都编了号。小T在看书的时候,每次取出一本书,看完后放回书柜然后再拿下一本。由于这些书太有吸引力了,所以她看完后常常会忘记原来是放在书柜的什么位置。不过小T的记忆力是非常好的,所以每次放书的时候至少能够将那本书放在拿出来时的位置附近,比如说她拿的时候这本书上面有X本书,那么放回去时这本书上原创 2017-02-03 19:43:54 · 544 阅读 · 0 评论