08 2013 档案

摘要:题意:有N个人,有限对的人可以在一起工作,问最多能有多少对.分析:任意图的最大匹配// File MAXName: 1099.cpp// Author: Zlbing// Created Time: 2013/8/31 14:37:38#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define CL(x,v); memset(x,v,sizeof(x));#define INF 0x3f3f3f3f#defi 阅读全文
posted @ 2013-08-31 14:55 z.arbitrary 阅读(713) 评论(0) 推荐(0)
摘要:匹配就是一个图中一堆没有端点的边的集合,求最大匹配就是求这个边集最大有多少条边。无论是任意图还是二分图,都有以下定理:当前匹配是最大匹配当且仅当不存在增广路。增广路的定义就是,一条包含奇数条边的路径,最前和最后的两条边都是非匹配边,且对于路径非两端的点,都连接着一条匹配边和非匹配边。求图的匹配的算法就是不断地找增广路,把增广路上的匹配边变成非匹配边,非匹配边变成匹配边。对于二分图来说,只要从一个没有被匹配到的点开始bfs(dfs)一下就能找到增广路(如果确实有增广路)。但是对于任意图来说,从一个没有被匹配到的点开始bfs(dfs)不一定能找到,能不能找到取决于遍历的顺序。于是,为了使任意图可以 阅读全文
posted @ 2013-08-31 14:23 z.arbitrary 阅读(2307) 评论(0) 推荐(1)
摘要:在线LCA如求A,B两点的LCA,先计算出各个结点的深度d[],然后,通过递推公式求出各个结点的2次方倍的祖先p[],假设d[A] > d[B],则找到d[p[A][i]] == d[B]也就是A的某一祖先与B深度相同,然后,u = p[A][i],通过p[u][i] 与p[B][i]比较找出LCA(巧妙的利用二进制).(p[a][b] 表示与a的距离为2^b的祖先,则p[a][0]表示为a的父亲。如 a->b->c->d->e,a为根, 则p[e][2] 为a)递推公式:p[a][b] = p[p[a][b - 1]][b - 1]/* 2^17=131072; 阅读全文
posted @ 2013-08-21 16:39 z.arbitrary 阅读(551) 评论(0) 推荐(0)
摘要:今天又重新复习了下并查集,发现食物链挺好的。这次用的是枚举他们之间的关系,我觉得比赛时我也应该会这么写,而不是公式判断。题意:动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这N个动物所构成的食物链关系进行描述:第一种说法是"1 X Y",表示X和Y是同类。第二种说法是"2 X Y",表示X吃Y。此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条 阅读全文
posted @ 2013-08-21 14:45 z.arbitrary 阅读(278) 评论(0) 推荐(0)
摘要:题意:给定一棵树,每条边都有一定的权值,q次询问,每次询问某两点间的距离。分析:这样就可以用LCA来解,首先找到u, v 两点的lca,然后计算一下距离值就可以了。这里的计算方法是,记下根结点到任意一点的距离dis[],这样ans = dis[u] + dis[v] - 2 * dis[lca(v, v)]。// File Name: 2586.cpp// Author: Zlbing// Created Time: 2013年08月19日 星期一 10时59分47秒#pragma comment(linker,"/STACK:102400000,102400000")#i 阅读全文
posted @ 2013-08-20 11:39 z.arbitrary 阅读(332) 评论(0) 推荐(0)
摘要:LCA离线算法它需要一次输入所有的询问,然后有根节点开始进行深度优先遍历(DFS),在深度优先遍历的过程中,进行并查集的操作,同时查询询问,返回结果。题意:求A ,B两点的最近公共祖先分析:dfs+并查集// File Name: 1330.cpp// Author: Zlbing// Created Time: 2013年08月18日 星期日 16时11分18秒#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;# 阅读全文
posted @ 2013-08-19 16:32 z.arbitrary 阅读(182) 评论(0) 推荐(0)
摘要:题意:有猫C个和狗D个,有V个投票人,每个人喜欢猫讨厌狗或则喜欢狗讨厌猫!求最多能满足多少投票人。分析:两个投票者矛盾的话就连一条边,总数减去最大匹配数/2就是要求的答案// File Name: ACM/HDU/2768.cpp// Author: Zlbing// Created Time: 2013年08月16日 星期五 15时14分15秒#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define CL 阅读全文
posted @ 2013-08-17 15:31 z.arbitrary 阅读(354) 评论(1) 推荐(0)
摘要:题意:求无向图最小割是否唯一分析:1、我们先对原图求一次最大流2、对残留网络,我们从S开始,找到所有所有S能到达的点;再从T开始,找出所有能到达T的点。3、判断原网络中是否还有没有访问到的点,如果没有,则唯一,否者,不唯一!// File Name: ACM/ZOJ/2587.cpp// Author: Zlbing// Created Time: 2013年08月16日 星期五 13时38分56秒#include#include#include#include#include#include#include#include#include#include#include#includeusi 阅读全文
posted @ 2013-08-17 14:55 z.arbitrary 阅读(678) 评论(0) 推荐(0)
摘要:题意此题题意不太好懂。现有n头牛和b个牛棚,每个牛棚可以养的牛的数目都有一个限制c[i],表示该牛棚最多只能关c[i]头牛,每头牛对每一个牛棚都有一个喜爱值,用1到b来表示,现在要安排这些牛,使得牛棚中的牛对牛棚的最大喜爱值与最小喜爱值的差值最小.分析:枚举区间+最大流新建源点向每头牛连边牛向barns连边barns向汇点连边,边权为barns的容量,其实就是一个二分图最后求最大流就好了// File Name: 3189.cpp// Author: Zlbing// Created Time: 2013年08月15日 星期四 16时26分07秒#include#include#include 阅读全文
posted @ 2013-08-16 17:25 z.arbitrary 阅读(275) 评论(0) 推荐(0)
摘要:题意:给一个有向图求给那些边增加容量能增加总的流量,求边的条数分析:一开始求的是割边,结果wa了,那是因为有些割边增加了容量,但总的容量也不会增加只有满流的边并且从源点汇点都有一条可扩展的路时,才满足条件因此,求完最大流后,在从源汇两点dfs,找扩展路。然后枚举边即可// File Name: 3204.cpp// Author: Zlbing// Created Time: 2013年08月15日 星期四 14时59分13秒#include#include#include#include#include#include#include#include#include#include#incl 阅读全文
posted @ 2013-08-16 15:59 z.arbitrary 阅读(300) 评论(0) 推荐(0)
摘要:题意:给一个矩形,从左上角走到右下角,并返回左上角(一个单元格只能走一次,左上角和右下角两个点除外)并且从左上到右下只能往右和下两个方向。从右下返回左上只能走上和左两个方向!分析:拆点,最小费用最大流。。额。。。刘汝佳训练指南的最小费用最大流模板超时了。。。。。。。。。。。。。。。。。。可能是因为边太少,点太多的缘故吧!还是数组实现的邻接表可靠啊!!!// File Name: 3376.cpp// Author: Zlbing// Created Time: 2013年08月15日 星期四 13时24分37秒#include#include#include#include#include#i 阅读全文
posted @ 2013-08-16 14:46 z.arbitrary 阅读(1126) 评论(0) 推荐(0)
摘要:题意:给你n个任务,k个机器,n个任务的起始时间,持续时间,完成任务的获利每个机器可以完成任何一项任务,但是同一时刻只能完成一项任务,一旦某台机器在完成某项任务时,直到任务结束,这台机器都不能去做其他任务最后问你当获利最大时,应该安排那些机器工作,即输出方案分析:要求的是最大费用,因此将费用取负就可以用最小费用最大流算法了建图很重要。如果图建的复杂的话,可能就会超时了的!新建源汇S T‘对任务按照起始时间s按升序排序拆点:u 向 u'连一条边 容量为 1 费用为 -c,u' 向 T连一条边 容量为 inf 费用为 0;如果任务u完成后接下来最先开始的是任务v则从u' 向 阅读全文
posted @ 2013-08-14 17:08 z.arbitrary 阅读(568) 评论(0) 推荐(0)
摘要:点操作:splay树可以一个一个的插入结点,这样的splay树是有序树,结点权值大于左儿子小于右儿子这样就是点操作区间操作:还有就是可以自己建树,这样的splay树就不是按权值的有序树,它不满足结点权值大于左儿子小于右儿子,,但是它也是有顺序的,无论怎么伸展,把它的结点中序遍历结果就是原来的数组顺序。因此自己建树可以操作区间!点操作模板// File Name: ACM/bzoj/1208.cpp// Author: Zlbing// Created Time: 2013年08月08日 星期四 16时33分53秒#include#include#include#include#include# 阅读全文
posted @ 2013-08-12 15:28 z.arbitrary 阅读(5984) 评论(2) 推荐(1)
摘要:题意:对数组进行各种操作其中REVOLVE右移操作。将区间[a,b]右移c位首先c可能比较多,可以先对区间长度取模。在右移之后,可以发现[a,b]被分为两个区间[a,b-c] [b-c+1,b],将后者插入到前者之前即可。// File Name: ACM/POJ/3580.cpp// Author: Zlbing// Created Time: 2013年08月10日 星期六 10时51分07秒#include#include#include#include#include#include#include#include#include#include#include#includeusin 阅读全文
posted @ 2013-08-12 14:32 z.arbitrary 阅读(1366) 评论(1) 推荐(0)
摘要:进入这个网站http://www.pygame.org/wiki/Compilation可以选择不同系统的安装方法其中ubuntu的安装命令是#这是python 2.X#install dependenciessudo apt-get install mercurial python-dev python-numpy ffmpeg \ libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsmpeg-dev \ libsdl1.2-dev libportmidi-dev libswscale-dev libavf... 阅读全文
posted @ 2013-08-11 00:18 z.arbitrary 阅读(2354) 评论(2) 推荐(0)
摘要:hg clone https://bitbucket.org/pygame/pygame出现abort: error: _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed只要在~/.hgrc中输入[web]cacerts=即可!hg 配置https证书认证http://mercurial.selenic.com/wiki/CACertificateslinux下在~/.hgrc中输入[web]cacerts = /etc/ssl/certs/ca-certif 阅读全文
posted @ 2013-08-11 00:13 z.arbitrary 阅读(1128) 评论(0) 推荐(0)
摘要:最近使用git从github上clone代码,总是失败,奔溃了快。还有ubuntu连apt-get update都执行不了,有的时候都装不了git,就快骂娘了。可惜在这样一个环境下,只能靠自己搞定了,设置代理是比较好的方式引用http://yansu.org/2013/05/20/set-proxy-for-git-or-apt.html安装goagent这个教程网上很多,放狗一搜即可。不过网上goagent教程里讲的大部分是给浏览器用的。其实goagent是监听了本地的8087端口,其实任何程序都可以利用这个端口,只要设置好即可。设置git代理直接在终端输入export https_prox 阅读全文
posted @ 2013-08-10 23:52 z.arbitrary 阅读(221) 评论(0) 推荐(0)
摘要:题意:区间翻转,切割,插入// File Name: ACM/HDU/3487.cpp// Author: Zlbing// Created Time: 2013年08月10日 星期六 21时35分28秒#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define CL(x,v); memset(x,v,sizeof(x));#define INF 0x3f3f3f3f#define LL long long# 阅读全文
posted @ 2013-08-10 22:05 z.arbitrary 阅读(334) 评论(0) 推荐(0)
摘要:题意:依次找第i大的数下标pos[i],然后将区间[i,pos[i]]翻转分析:splay树区间翻转// File Name: ACM/HDU/1890.cpp// Author: Zlbing// Created Time: 2013年08月10日 星期六 20时26分39秒#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define CL(x,v); memset(x,v,sizeof(x));#defin 阅读全文
posted @ 2013-08-10 21:21 z.arbitrary 阅读(575) 评论(0) 推荐(0)
摘要:区间更新求和主要用来练习splay树区间更新问题//splay树的题解// File Name: 3468-splay.cpp// Author: Zlbing// Created Time: 2013年08月09日 星期五 16时30分32秒#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define CL(x,v); memset(x,v,sizeof(x));#define INF 0x3f3f3f3f# 阅读全文
posted @ 2013-08-10 16:59 z.arbitrary 阅读(275) 评论(0) 推荐(0)
摘要:题意:给出一个n个数的数列a,对于第i个元素ai定义fi=min(abs(ai-aj)),(1#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define CL(x,v); memset(x,v,sizeof(x));#define INF 0x3f3f3f3f#define LL long long#define REP(i,r,n) for(int i=r;i=r;i--)const int MAXN=200010;con 阅读全文
posted @ 2013-08-10 14:08 z.arbitrary 阅读(1319) 评论(0) 推荐(0)
摘要:这个题也是单点维护,不管来的是人还是狗,只要num=0就插入,否则就删除。// File Name: ACM/bzoj/1208.cpp// Author: Zlbing// Created Time: 2013年08月08日 星期四 16时33分53秒#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define CL(x,v); memset(x,v,sizeof(x));#define INF 0x3f3f 阅读全文
posted @ 2013-08-10 11:00 z.arbitrary 阅读(496) 评论(0) 推荐(0)
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=1503用w值记录它的加减情况,加(减)操作加在w上加(减)val,当新来一个的时候你插入树中应该是以前工资未变化时的相对值,也就是val-w// File Name: ACM/bzoj/1503.cpp// Author: Zlbing// Created Time: 2013年08月08日 星期四 14时29分46秒#include#include#include#include#include#include#include#include#include#include#include#in 阅读全文
posted @ 2013-08-09 15:15 z.arbitrary 阅读(1865) 评论(0) 推荐(0)
摘要:题意:给N个点,M条边。有些边的距离是精确的,有些边的距离是不精确的(>=1)分析对于 a-b==t的边可以建边a=1的边可以建边b#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define CL(x,v); memset(x,v,sizeof(x));#define INF 0x3f3f3f3f#define LL long long#define REP(i,r,n) for(int i=r;i=r;i--)#de 阅读全文
posted @ 2013-08-06 10:50 z.arbitrary 阅读(254) 评论(0) 推荐(0)
摘要:题意:有一个序列,题目用n个整数组合 [ai,bi,ci]来描述它,[ai,bi,ci]表示在该序列中处于[ai,bi]这个区间的整数至少有ci个。如果存在这样的序列,请求出满足题目要求的最短的序列长度是多少。分析:dis[i]表示从0->i-1这i个数存在多少个数。则有dis[b+1]-dis[a]>=c;dis[i+1]-dis[i]>=0 && dis[i+1]-dis[i]#include#include#include#include#include#include#include#include#include#include#includeusi 阅读全文
posted @ 2013-08-05 16:38 z.arbitrary 阅读(284) 评论(0) 推荐(0)
摘要:题意:在有向加权图中G(V,E),邮局要从起点S向其他n个节点发送邮件,于是派出n个邮递员,分别到达其他n个地点发送,然后回到起点S,求出所有邮递员所经过的总路程的最小值。分析:正向一次dijkstra,反向一次dijkstra// File Name: 2008.cpp// Author: Zlbing// Created Time: 2013年08月04日 星期日 14时18分49秒#include#include#include#include#include#include#include#include#include#include#include#includeusing nam 阅读全文
posted @ 2013-08-05 15:21 z.arbitrary 阅读(383) 评论(5) 推荐(0)
摘要:题意:求第K 大连续区间分析:二分答案,再n * log(n)判断有几个区间的区间和大于mid,然后调整上下界,使这个值不断的接近k。判断符合条件的区间总数:线性扫描sum[n](前n项和) 每次判断以i结尾的区间有几个区间和大于等于mid,累加即可// File Name: 191-E.cpp// Author: Zlbing// Created Time: 2013年08月03日 星期六 15时10分13秒#include#include#include#include#include#include#include#include#include#include#include#incl 阅读全文
posted @ 2013-08-04 16:40 z.arbitrary 阅读(527) 评论(0) 推荐(0)
摘要:题意:有N 个点,M条边,加一条边,求割边最少。(有重边)分析:先求双连通分量,缩点形成一个生成树,然后求这个的直径,割边-直径即是答案因为有的图上可能有重边,这样不好处理。我们记录每条边的标号(一条无向边拆成的两条有向边标号相同)这样就能限制不走一样的边而能走重边!// File Name: 1002.cpp// Author: Zlbing// Created Time: 2013年08月02日 星期五 18时16分10秒#pragma comment(linker,"/STACK:102400000,102400000")#include#include#includ 阅读全文
posted @ 2013-08-04 11:26 z.arbitrary 阅读(1418) 评论(0) 推荐(0)
摘要:题意找到区间里有多少组连续数字串分析:(转)思路:显然,我们要使得value最大,就要尽量将连续的ID分在一组,所以问题转化为求一个区间中连续ID区间的个数。我们从左往右扫描,依次考虑右端点为i的询问,设dp[l]为区间[l,i]的连续区间个数,po[i]为i出现的位置,若还未出现,则为0,设我们当前考虑的右端点为a[i],首先我们假设a[i]不能和区间[1,i-1]中的任何一个数分到一组,则我们要将dp[1]到dp[i-1]全部加1,然后考虑po[a[i]+1]是否不为0,若不为0则说明a[i]-1已经在前面出现,则我们需要将dp[1]到dp[po[a[i]+1]]全部减一个1,因为a[i] 阅读全文
posted @ 2013-08-02 16:28 z.arbitrary 阅读(784) 评论(0) 推荐(0)