摘要: 树的直径 树的直径求法: 1. 任取一点u,找到树上距u最远的点s 2. 找到树上距s点最远的点t,s t的距离即为所求 cpp include include include include include include include using namespace std; int init 阅读全文
posted @ 2018-02-06 11:06 Mr_Wolfram 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 树上差分 对于一条路径 $u v$ 来说,设 $t=LCA(u,v)$ ,d[]为差分数组 ,则有 d[u]++;d[v]++;d[t] ;d[fa[t]] ; 注意:题目中所给的路径上的点都多计算了一次,统计答案时要减去 cpp include include include include us 阅读全文
posted @ 2018-02-04 17:01 Mr_Wolfram 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 树剖求LCA 我们可以发现,两条路径ab,cd相交,当且仅当 dep[lca(a,b)] =dep[lca(c,d)]&(lca(lca(a,b),c)==lca(a,b)||lca(lca(a,b),d)==lca(a,b))或把abcd交换一下即可 cpp include include inc 阅读全文
posted @ 2018-02-04 10:51 Mr_Wolfram 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 树剖 将一个软件是否安装,看作是sum数组的0或1,对于每个操作前后sum[1]的变化,就是所求 cpp include include include include define lson l,mid,rt'9'){ if(c==' ') fh= 1; c=getchar(); } while( 阅读全文
posted @ 2018-02-03 20:05 Mr_Wolfram 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 树剖+线段树维护连续相同区间个数 注意什么时候长度要减一 cpp include include include include include define lson l,mid,rt'9'){ if(c==' ') fh= 1; c=getchar(); } while(c ='0'&&cma) 阅读全文
posted @ 2018-02-03 18:46 Mr_Wolfram 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 迷之TLE cpp include include include include include define lson l,mid,rt'9'){ if(c==' ') fh= 1; c=getchar(); } while(c ='0'&&cma){ ma=siz[v]; son[u]=v; 阅读全文
posted @ 2018-02-03 10:25 Mr_Wolfram 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 支持各种数据结构上树,注意取膜. cpp include include include include include include define lson l,mid,rt'9'){ if(c==' ') fh= 1; c=getchar(); } while(c ='0'&&cma){ ma 阅读全文
posted @ 2018-02-02 20:28 Mr_Wolfram 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 有上下界的最小费用最大流 可以联想到供求平衡问题,所以我们要拆点做这道题 把每天分为二分图两个集合中的顶点Xi,Yi,建立附加源S汇T。 1、从S向每个Xi连一条容量为ri,费用为0的有向边。 2、从每个Yi向T连一条容量为ri,费用为0的有向边。 3、从S向每个Yi连一条容量为无穷大,费用为p的有 阅读全文
posted @ 2018-01-26 16:50 Mr_Wolfram 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 最大权闭合子图 胡伯涛论文真是个好东西.jpg 求一个有向图的最大权闭合子图,常应用于有先决条件的最优化问题中 将所有正权点与源点相连,容量为点权; 将所有负权点与汇点相连,容量为点权的相反数; 将原图中的边相连,容量为INF 可以发现,所有正点权之和 最小割即为答案 证明见胡伯涛论文 如何输出该子 阅读全文
posted @ 2018-01-26 11:27 Mr_Wolfram 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 状压+BFS 通过观察数据范围可知,我们应该状压钥匙种类,直接BFS即可 注意,一个点处可能不知有一把钥匙 阅读全文
posted @ 2018-01-25 20:25 Mr_Wolfram 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 简单最大流建图 cpp include include include include include include using namespace std; const int MAXN=600,MAXM=2000005; int head[MAXN],cur[MAXN],n,m,s,t,num 阅读全文
posted @ 2018-01-25 16:16 Mr_Wolfram 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 二分图最大点权独立集 通过题目描述我们可以很明显的看出要通过二分图建模,二分图求最大独立点集很容易,就是建立二分图求n 最小割,然而这里加入了权值,而且权值是在点上的,那么我们对于每个点连一条到源点或汇点的容量等于权值的边,求最小割即可,见胡伯涛论文 cpp include include incl 阅读全文
posted @ 2018-01-25 15:39 Mr_Wolfram 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 二分图求最大独立点集 本问题在二分图中已处理过,此处用dinic写了一遍 cpp include include include include include include using namespace std; const int MAXN=40005,MAXM=5000005; int s 阅读全文
posted @ 2018-01-25 11:40 Mr_Wolfram 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 啊啊啊,再把MAXN和MAXM搞反我就退役 层次图求不相交路径数 第一问简单DP 第二问想办法把每一个不上升子序列转化成DAG上的一条路径,就转换成了求不相交路径数 因为每一个数只能用一次,所以要拆点 对与dp[i]==1连一条从s到i的边,对于dp[i]==ans1连一条从i到t的边 对于dp[j 阅读全文
posted @ 2018-01-24 21:06 Mr_Wolfram 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 二分图应用模版 cpp include include include include include include using namespace std; const int MAXN=400,MAXM=50005; int head[MAXN],nume,n,m,maxflow,s,t,cu 阅读全文
posted @ 2018-01-24 18:42 Mr_Wolfram 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 非常舒适的最大流 非常显然的建图方法,然而因为数组开小卡了很长时间 cpp include include include include include include using namespace std; const int MAXN=2500,MAXM=100005; int head[M 阅读全文
posted @ 2018-01-24 18:24 Mr_Wolfram 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 贪心做法 每次尽可能选择已经放过球的柱子 cpp include include include include include using namespace std; int num[100][1000],n; bool chk(const int &a,const int &b){ int t 阅读全文
posted @ 2018-01-24 15:16 Mr_Wolfram 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 贪心做法 第一眼看见觉得和均分纸牌差不多,然而因为这是环形的,并不能用均分纸牌的方法做,但是均分纸牌的思想仍然适用 首先我们假设平均数为sum1。 那么对于第1个人,我们假设他给第N个人K个糖果, 第2个人给1 第3个人给2 第n个人给第n 1个人 那么对于第1个人给完n,第2个人给完1,第一个人不 阅读全文
posted @ 2018-01-24 10:56 Mr_Wolfram 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 并不是网络流 状压+SPFA 通过题目中的描述及数据范围可知,我们状压当前的漏洞,以每个二进制位表示是否有这个漏洞,并以状压的结果为顶点,以补丁的时间为边跑SPFA即可 cpp include include include include include using namespace std; 阅读全文
posted @ 2018-01-23 16:21 Mr_Wolfram 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 网络流实现二分图匹配 对于x集合的每一个点连一条从源点出发的容量为一的边,对于y集合的每一个点连一条到汇点的容量为一的边,跑最大流 cpp include include include include include include include using namespace std; con 阅读全文
posted @ 2018-01-22 18:25 Mr_Wolfram 阅读(182) 评论(0) 推荐(0) 编辑