09 2013 档案
摘要:题外话:我觉得我自己开通blog最大的原因是为了锻炼自己的语言组织能力、记录一下自己的解题过程、心路历程。那些访问量什么的都是浮云。 怎么说呢?最近有点私事导致效率不太高,在区域赛快要到来时,这种情况显然不好。 我们队定在了成都区域赛&&长春南京区域赛两个赛区,其实现在也不太想去长春了,正如队友Jingo所说,时间拖得太久了,早点完事算了。当然我们这种心态本身就不太好。 这四次网络赛中,我们队的主力是Jingo,能出的题基本上都是他出的,虽然那些题基本上都是他负责的数学题or思维题,但是这样真的好吗?现在我和Timer的思维都有些局限,这种思维不是一天两天能够锻炼的出来的。特别
阅读全文
摘要:题目:zdf给出的题目翻译:从前有一个富饶的国度,在这里人们可以进行自由的交易。这个国度形成一个n个点的无向图,每个点表示一个城市,并且有一个权值w[i],表示这个城市出售或收购这个权值的物品。又到了一年一次团圆的日子,所有外出打工的人都急忙赶着回家。现在有m个人,给出每个人的工作地点和家的编号,让你求出每个人在回家的路上通过倒卖物品获得的最大收益,因为要急忙赶着回家,所以他们一定会选择最短的路程,并且只进行一次倒卖(即最多买一次、卖一次)。分析: 与倍增求lca相似,额外记录四个值: dmax[x][i]:从x的第2^i父亲到该节点的节点最大权值 dmin[x][i]:从x的第2^i父...
阅读全文
摘要:Delivery题目还是自己看吧 - -! 看似图论,实际上是一个考察思维以及数据结构的题。 我们对于先前和向后的边分别进行统计。 对询问离线。 小边按照左端点从大到小排序。 1.对于向后的边,询问按照出发点从大到小排序。比如询问有 2 3 3 4 我们先对3 4进行计算。把向后的小边(3,5) ,(3,4) 用线段树维护,分别在线段树的位置4,5中插入用该边时可以优化的值。询问3 4时,我们发现出发点3以及后面的小边都加进了线段树中,直接询问线段树区间 [3,4]的最小值进行计算即可。注意一下可能加入了边之后比不加边更差的情况。 然后再对2 3进行计算,这次把小边(2,...
阅读全文
摘要:题目:给出空间中的n对点,要求从每对点中选出一个,使得最近的点的距离最远。分析: 二分的思想很明显,二分答案之后,建图:如果两点之间的距离小于二分值时,连接相应的边,通过2-sat判断一下即可。 注意到题目的要求是向下取整,于是我们可以先*10000,最后直接取模即可。#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsign..
阅读全文
摘要:E. e-Government题目: 给出n个字符串,表示n个人名,有两种操作: ?string ,统计字符串string中出现的属于城市居民的次数。 +id,把编号为id的人变为城市居民,如果已经是忽略。 -id,把编号为id的人变为不是城市居民,如果已经不是的话忽略。 现有m个操作,对于?输出结果。分析: 很容易想到建立ac自动机,+-操作倒简单,使用bool数组标记一下即可。对于每个询问,每次都沿着fail指针往上走,遇到了标记为城市居民的字符串时加1,否则继续往上走。 在这显然会TLE。很容易构造出以下数据: a aa aaa ... aaa...aaa ?a...
阅读全文
摘要:335B - Palindrome题目: 给出一个字符串(均有小写字母组成),如果有长度为100的回文子串,输出该子串。否则输出最长的回文子串。分析: 虽然输入串的长度比较长,但是如果存在单个字母100或以上的话,直接输出即可。 利用抽屉原理发现,如果不存在上面所说的情况,长度不会超过26*99 dp[l][r]表示l到r的回文子串的长度,dp转移方式比较明显,记录一下得到最优值时的位置。 输出方案时,如果dp[1][len]>=100的话,显然可以输出长度100的子串,否则直接输出该长度。 具体实现用到了栈、队列保存信息,可以看代码。#include #include #incl...
阅读全文
摘要:这里有状态压缩DP的好博文题目:题目比较神,自己看题目吧分析:大概有两种思路:1.dfs,判断正方形的话可以通过枚举对角线,大概每次减少4个三角形,加上一些小剪枝的话可以过。2.状压DP,先预处理出所有可以组成正方形的方案,根据题目的数据范围计算不会超过100个正方形方案。n个正方形用二进制的方式记录,每一位记录是否有没有引爆,则状态转移比较明显了。#include #include #include #include #include #include #include #include #include #include #include #include using namespace
阅读全文
摘要:题目:还是自己看题目吧trick:当不连通时不需要人去炸。否则,当桥的费用为0时当然需要一个人去炸。。。#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long ull;#define debug puts("here")#define rep(i,n) for(int i=0;i#d
阅读全文
摘要:Water Tree给出一棵树,有三种操作:1 x:把以x为子树的节点全部置为12 x:把x以及他的所有祖先全部置为03 x:询问节点x的值分析: 昨晚看完题,马上想到直接树链剖分,在记录时间戳时需要记录一下出去时的时间戳,然后就是很裸很裸的树链剖分了。 稳稳的黄名节奏,因为一点私事所以没做导致延迟了 (ps:后来想了一下,不用树链剖分直接dfs序维护也行。。。)#include #include #include #include #include #include #include #include #include #include #include #include usin...
阅读全文
摘要:题目:给出平面上n个点,现在找m个点,并且使得这m个点最近的两个最远。分析:显然这满足二分的性质,二分答案,根据点距离需要大于等于二分值重新构造新图,则问题变成了:在新图中找出满足所有点对之间的距离大于等于二分的值的一个子图。因此在新图中寻找最大团即可。具体看代码#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned lo
阅读全文
摘要:说明摘自:pushing my way的博文最大团通过该博主的代码,总算理解了最大团问题,但是他实现时的代码效率却不算太高。因此在最后献上我的模板。加了IO优化目前的排名是:6yejinru328MS288K2822BC++2013-09-14 10:53:35问题描述:团就是最大完全子图。给定无向图G=(V,E)。如果UV,且对任意u,vU 有(u,v)E,则称U 是G 的完全子图。G 的完全子图U是G的团当且仅当U不包含在G 的更大的完全子图中,即U就是最大完全子图。G 的最大团是指G中所含顶点数最多的团。例如: (a) (b) (c) (d)图a是一个无向图,图b、c、d都是图a的团,且
阅读全文
摘要:4612Warm hdu up题目:给出一个图,添加一条边之后,问能够在新图中得到的最少的桥的数量。分析:我们可以双联通分量进行缩点,原图变成了一棵树。问题变成了:求树中添加一条边之后,使得不在圈的边最少。显然求一边直径,用总边数减掉最长路上的边数就是答案。注意数据存在重边的情况。#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;typedef un
阅读全文
摘要:题目:给出一棵树,每棵树的节点有权值,现在有m组询问,在线询问以节点x为根,高度为y的所有子节点的最大权值。这题是我今早在做HDU 4601时,由于思路错了,稍微改动了一下题目,得到这个简单版,不知道有没有出现过原题。分析: 由于必须在线,离线的做法不可取。 询问的是以节点x为根的子树的节点信息,因此考虑一下dfs序。在dfs时,我们用数组d[i]记录第i层的节点。那么,在一棵子树下相同高度的节点必然连续出现在数组d[i]中。对于n个节点按d[i]重新编号,并且把值也在新编号的位子上,记录相应的hash值(hash[新编号] = 旧编号)。 构造线段树,维护一下新的编号。 这时,以节点...
阅读全文
摘要:HDU 4716A Computer Graphics Problem水题。略HDU 4717The Moving Points题目:给出n个点的起始位置以及速度矢量,问任意一个时刻使得最远的两点的距离最小。分析:显然只有两点的话,答案满足三分性质。对于多个点,画个图分析一下,其实也满足三分性质。因此,先构造n*(n-1)/2个二次函数,于是三分枚举时间即可。#include #include #include #include #include #include #include #include #include using namespace std;#define pb push_ba
阅读全文
摘要:昨天热身赛的简单版:LCIS。昨天那题用树链剖分,不知道哪里写错了,所以水了水这题看看合并、更新方式是否正确,发现没错啊。看来应该是在树链剖分求lca时写错了。。。题目:给出n个数,有两种操作: 1.单点修改 2.区间询问:最长连续上升子序列分析:只需要维护五个域就行:lix,rdx,mix,lval,rval。记录当前区间 最左的值lval , 最右的值rval,必须从左起连续上升序列的长度lix,必须右起下降的长度rdx。合并时注意下即可。#include #include #include #include using namespace std;char IN;bool NEG;i..
阅读全文
摘要:今天,我们队算是选好了区域赛的地方。 由于区域赛临近,自己还是很多不会,并且最近状态不算太好,所以制订一下最近的计划: 11-20:主攻图论,主要涉及:网络流建模(最小割Amber那篇论文,有上下界的网络流,全局最小割),二分匹配,差分约束,2-sat,KM,分层图,涉及tarjan算法(桥,割点,强连通),最小树形图(done),会套模板(最小度限生成树,一般图匹配带花树算法),弦图,最大团。 21-25:主攻字符串,KMP,字符串hash,进一步理解AC自动机(普通,fail树+树状数组维护,ac自动机上的dp),SA算法(现在只会套一些基本的模板题),有时间看看后缀自动机。 ...
阅读全文
摘要:hdu 2121题目:给出m条有向路,根不确定,求一棵最小的有向生成树。分析:增加一个虚拟节点,连向n个节点,费用为inf(至少比sigma(cost_edge)大)。以该虚拟节点为根求一遍最小树形图算法,这时肯定存在解,如果费用>=inf时,说明无解。这是因为sigma(cost_edge)<inf。如何求得根?在寻找前驱时发现为根,则更新一下那条边的边号即可。hdu 4009题目:n个地方需要供水,可以自己挖水井供给自己,或者可以从别的地方供水,给出各自的方案,问对n个城市供水的最小费用。分析:由于可以自己供应给自己,题目显然有解。跟上题相似,添加一个虚拟节点,对n个城市连边,
阅读全文
摘要:最小树形图求的是有向图的最小生成树,跟无向图求最小生成树有很大的区别。步骤大致如下:1.求除了根节点以外每个节点的最小入边,记录前驱2.判断除了根节点,是否每个节点都有入边,如果存在没有入边的点,说明树形图不存在,退出。3.沿着节点的前驱找,如果发现环,把环缩点。4.如果不存在环,结束。否则,跳到1.其实我是来贴模板的。。。比较好的讲解:最小树型图的求解与实现代码讲解比较好的:hdu4009 Transfer water ( 最小树形图的模板 )用IO优化时死活TLE,改了scanf就过了,后来用!=EOF发现数据不全,怪不得TLE了,囧#include #include #include #
阅读全文
摘要:118EBertownroads题目:把无向图指定边的方向,使得原图变成有向图,问能否任意两点之间互达分析:显然如果没有桥的话,存在满足题意的方案。输出答案时任意从一个点出发遍历一遍即可。求桥的话,利用tarjan算法的low和dfn值判断一下即可。#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long
阅读全文
摘要:样例说明:n(城市数目) m(工程队数目)每个工程队上交的税收 val[i]k(k个工程)xi yi ci costi , 工程队ci承包由xi到yi,政府的补贴为costi注意:如果聘用了工程队c,则所有与工程队c的项目政府都得补贴,并且所有与c相关的工程队也得参与建设(政府补贴)。这里的有关系是指:工程队c,d承包的项目 xc yc , xd yd中yc==xd。感觉题意好难理解。理解之后就好办了,这不就是裸的最大权闭合子图吗?不懂请看Amber的《论文最小割模型在信息学竞赛中的应用》。政府最大获利 = 实际上总的税收-实际上政府的补贴 = 雇佣的公司的税收-雇佣的公司的补贴 = 总税..
阅读全文
摘要:发现今天没怎么做题,于是随便写了今天杭电热身赛的一题。题目:给出一棵树,删边和添边的费用都是1,问如何删掉一些树边添加一些树边,使得树变成一个环。分析:统计树的分支数。大概有两种做法:1.直接dfs,由底向上统计,对于叶子节点,返回1。对于父节点,统计子节点的返回值的和(sum),如果大于1,说明存在两个子链或以上,所以这里需要sum-1个分支,返回0。如果小于等于1,返回1。画个图就知道了。。。图中发现:节点返回值和为sum>1时,需要sum-1个分支。某节点返回值和sum=3,则需要2个分支;一个返回值和为sum=2,则需要1个;如果返回值为1,说明可以跟上面某个父节点组成一条链。加
阅读全文
摘要:题目:给出n*kk的矩阵,格子a[i][k]表示第i个客户需要第k种货物a[i][k]单位。给出m*kk的矩阵,格子b[j][k]表示第j个供应商可以提供第k种货物b[j][k]单位。再给出k个n*m的矩阵,格子c[k][i][j]表示第k种货物由j供应商提供给客户i的话,每单位运费为c[k][i][j]。问最小费用。分析: 刚开始时,虽然考虑到每种货物其实是不相关的,但是想到在跑费用流时应该没多大影响,所以直接建图,跑最小费用流,TLE了。。。 后来对于每种货物单独来考虑,即建图之后跑一次最小费用流,进行k次求费用流之后,判断总流是否等于需求的货物数量。这样建图,节点数明显减少了很多,实..
阅读全文
摘要:题目:给出一个图,问最少删除多少个点,使得从点1到点n经过的点数超过k个。分析: 上网搜了一下,发现很多人用网络流做的,发现我不会。再后来看到这篇说网络流的做法是错的,囧。 后来发现点数有点少,直接上爆搜。每次搜索前先跑一遍最短路,判断是否满足,如果满足更新答案,退出。 否则,在求最短路时记录一下路径,然后枚举删除最短路上的点,继续搜。 第一次写时,记录路径用的是全局变量,每次搜下一层的时候就会变,发现居然也A了。。。 我试了一下,发现n不会等于1。。。#include #include #include #include #include #include #include #in...
阅读全文
摘要:题目:给出n*n的方格矩阵,现在从左上方走m次到右下方,问m次能够获得的最大价值和。分析:最大费用流。拆点进行限制每个格子只取一次,假设点x拆成 x,xx,右边(假设有)y,yy,下方(假设有)z,zz 点 点 流量 费用 则:x , xx , 1 , -a[i][j] x , xx , m , 0 xx, y , m , 0 xx , z , m , 0 用最小费用流增广m次即可#include #include #include #include #include #include #include #include #include #include #in...
阅读全文
摘要:今天再做一天树的题目,明天要开始专攻图论了。做图论十几天之后再把字符串搞搞,区域赛前再把计几看看。3083: 遥远的国度Time Limit:10 SecMemory Limit:128 MBSubmit:400Solved:89[Submit][Status]Description描述zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度。当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcwwzdjn的去路,他需要zcwwzdjn完成任务后才能进入遥远的国度继续追杀。问题是这样的:遥远的国度有n个城市,这些城市之间由一些路连接且这些城市构成了一颗树。这个
阅读全文
摘要:支持:1.添加边 x,y2.删边 x,y3.对于路径x,y上的所有节点的值加上w4.询问路径x,y上的所有节点的最大权值分析:裸的lct...rev忘了清零死循环了两小时。。。1:就是link操作2:就是cut操作3:维护多一个mx域,mx[x]表示在splay中以节点x为根的子树的最大点权,每次修改时,把x置为splay的根,打通y到x的路径,把y splay到根,那么,直接对y节点的lazy标记加上为w即可。4:同3操作,把x置为splay的根,打通y到x的路径,把y splay到根,那么,y子树所对应的节点就是路径x到y的所有节点。另外,题目貌似描述有点问题,不光是询问非法输出-1,是指
阅读全文
摘要:题目:p条路,连接n个节点,现在需要从节点1到节点n,不重复走过一条路且走t次,最小化这t次中连接两个节点最长的那条路的值。分析:二分答案,对于#include #include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long ull;#define debug puts("here")#define rep(i,n) for(
阅读全文
摘要:题目:给出n部电影的可以在周几拍摄、总天数、期限,问能不能把n部电影接下来。分析: 对于每部电影连上源点,流量为总天数。 对于每一天建立一个点,连上汇点,流量为为1。 对于每部电影,如果可以在该天拍摄,则连上一条流量为1的边。 跑一次最大流。。。#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long lo...
阅读全文
摘要:[Usaco2010 Mar]gather 奶牛大集会Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会。当然,她会选择最方便的地点来举办这次集会。每个奶牛居住在 N(1#include #include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long ull;#define debug puts("here&
阅读全文
摘要:1822: [JSOI2010]Frozen Nova 冷冻波Time Limit:10 SecMemory Limit:64 MBSubmit:585Solved:175[Submit][Status]DescriptionWJJ喜欢“魔兽争霸”这个游戏。在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵。我们认为,巫妖和小精灵都可以看成是平面上的点。 当巫妖和小精灵之间的直线距离不超过R,且巫妖看到小精灵的视线没有被树木阻挡(也就是说,巫妖和小精灵的连线与任何树木都没有公共点)的话,巫妖就可以瞬间杀灭一个小精灵。 在森林里有N个巫妖,每个巫妖释放Froze
阅读全文
摘要:2879: [Noi2012]美食节Time Limit:10 SecMemory Limit:512 MBSubmit:324Solved:179[Submit][Status]DescriptionCZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节。作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴。他很快就尝遍了美食节所有的美食。然而,尝鲜的欲望是难以满足的。尽管所有的菜品都很可口,厨师做菜的速度也很快,小M仍然觉得自己桌上没有已经摆在别人餐桌上的美食是一件无法忍受的事情。于是小M开始研究起了做菜顺序的问题,即安排一个做菜的顺序使得同学们的等待时间最短。小M发现,美食节共有n种不
阅读全文