
-------------图论-------------
CHN_JZ
爆0 forever
展开
-
[LCT]BZOJ 2002——[Hnoi2010]Bounce 弹飞绵羊
2002: [Hnoi2010]Bounce 弹飞绵羊题目描述某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,则绵羊被弹飞。绵羊想知道当它从第i个装置起步时,被弹原创 2017-07-10 15:35:19 · 1037 阅读 · 0 评论 -
[二分图最大独立集]BZOJ 1143—— [CTSC2008]祭祀river
题目梗概给定一张有向图,在这个图上的一些节点放上标记且任意标记节点不被其他标记节点到达。使标记节点个数最大化。解题思路对于每一个点还是进行拆点操作,这样就形成一张二分图。题目答案显然就是二分图的最大独立集。最大独立集=n-最小顶点覆盖,不懂戳这#include<cstdio>#include<cstring>using namespace std;const int maxn=105,maxm原创 2017-08-07 21:55:11 · 766 阅读 · 0 评论 -
[拓扑+LCA]BZOJ 2815——[ZJOI2012]灾难
Ps:八中上这题还没有题目描述,这是要靠OIerYY的节奏吗QuQ题目梗概给定一个DAG。 DAG表示的意思就是x吃y(就像一张食物网),求第i种生物灭绝后有多少生物跟着灭绝。 数据范围:模拟肯定是过不了的啦。解题思路从食物网的最低端生物开始考虑,因为其是生产者,所以我们可以假设一个有个节点叫做太阳(没有太阳所有生物都会挂QAQ),然后我们构造一棵树,这棵树上的每个节点的fa是如果要灭绝这个生物原创 2017-07-24 11:01:35 · 572 阅读 · 0 评论 -
[霍尔定理]「2017 山东一轮集训 Day2」LOJ 6062——PAIR
什么是霍尔定理这是关于二分图的一个非常重要的定理。 但是博主今天第一接触,真不愧是蒟蒻。 主要内容: 设M(U1)M(U1)为与U1U1中的点相连的点集,一个二分图U,V(|U|<=|V|)U,V(|U|<=|V|)存在完美匹配,满足对于任意点集x∈Ux∈U都有|M(X)|>=|X||M(X)|>=|X| 感谢法老学长的PPT。题目梗概给出一个长度为 n 的数列a和一个长度为m的数列b,求a原创 2017-07-26 22:15:47 · 3488 阅读 · 0 评论 -
[二分图匹配] [NOI2009] BZOJ 1562——序列变换
题目梗概对于N个整数0~N-1,对于每个数i,求字典序最小序列Ti,满足Ti都是0~N-1不重复的数,且dis(i,Ti)=Didis(i,Ti)=Di,其中dis(i,Ti)=min(|i−Ti|,N−|i−Ti|)dis(i,Ti)=min(|i-Ti|,N-|i-Ti|),D为给定序列。不一定存在解 1≤n≤100001≤n≤10000解题思路题目对最后的答案有一个限制条件,显然满足这种条件原创 2017-07-26 21:52:29 · 601 阅读 · 0 评论 -
[最小费用最大流]BZOJ 1070 [SCOI2007]——修车
题目梗概要修n辆车,有m个修理员,给出每个修理员修每辆车的时间。求最短时间(一次只能修一辆车)。解题思路把每个修理员看成是在n个时段的修理员。如果要第k个时段用到第j个修理员修车i,那么对后面 的影响是f[i][j]∗(n−k+1)f[i][j]*(n-k+1)建立超级汇连接n辆车,超级汇连接拆分后的修理员,修理员和车之间按以上关系相连。容量显然都是1,刷费用流就可以了。#include<cstdi原创 2017-09-29 19:11:07 · 522 阅读 · 0 评论 -
[最小割]BZOJ 1497——[NOI2006]最大获利
题目梗概有m个通讯,你可以获得一定的利润。但是通讯必须开通ai,biai,bi两个中转站,开通中转站需要额外的费用。问你能获得最大的利润是多少。解题思路你要换个角度思考这个问题,把边看成一个点。如果要获得这个点的值就必须开通另外两个点。这样显然会形成一张二分图,但是我们会在这张图上进行取舍。显然每种取舍方式都对应一种最小割。以上只是简略的概述了这个思想,详见胡伯涛的《最小割模型在信息学竞赛中的应用》原创 2017-10-19 16:25:25 · 798 阅读 · 0 评论 -
[Tarjan]BZOJ 1051—— [HAOI2006]受欢迎的牛
[Tarjan]BZOJ 1051—— [HAOI2006]受欢迎的牛题目梗概给出A喜欢B的关系,这个关系可以传递。求被所有牛喜欢的牛的数量。解题思路缩点之后,出度为0的强连通分量的大小就是答案。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxm=50005,maxn=1原创 2017-10-06 11:21:51 · 1142 阅读 · 0 评论 -
[边双]hihocoder 1184——边的双连通分量
题目梗概裸的边双。解题思路没有桥的极大图就是边双。考虑怎么求桥。Tanjan的时候回不去的就是桥,即low[son[j]]>dfn[x]low[son[j]]>dfn[x]#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=20005,maxm=200005;int t原创 2017-10-29 07:53:16 · 587 阅读 · 0 评论 -
[二分+最大流]51 Nod——1757 大灾变
题目描述死亡之翼降临了!艾泽拉斯大陆的子民们必须逃出他的魔爪! 艾泽拉斯的结构是一棵树,这棵树上的一些节点是地精建造的通往地下避难所的洞口。 除了这些洞口之外,树上的每个节点上都有一个种族,每个种族通过树上的一条边都需要一个单位时间。 因为地精比较矮小,所以洞口很窄,每个单位时间只能让一个种族通过,但是一个单位时间内的一个节点上可以存在多个种族。 地精们需要你求出最少需要多少单位时间才能让所原创 2017-10-22 20:38:32 · 773 阅读 · 0 评论 -
[2-sat]codeforces 875 C——National Property
题目梗概给出一些小写字符串,要求把一些单词改成大写,使得这些字符串的字典序与输入给出顺序相同。解题思路对于一个字符只有改和不改两种状态,所以马上想到2-sat。考虑如何建边,对于相邻的两个字符串,假设找到最近的不相同的两个字符a.b。如果a>b,那么a必须改大写,且b必须改小写。如果a#include<cstdio>#include<cstring>#include<vector>#inclu原创 2017-10-17 13:28:40 · 1109 阅读 · 0 评论 -
[虚树+树形DP]BZOJ 2286—— [Sdoi2011]消耗战
题目梗概给出一棵有比边权的树。每次给出K个点,询问使这K个点不与1联通所需要砍掉的边权总和最小值。解题思路假如只有一次询问,显然可以用树形DP解决,f[i]f[i]表示使i的子树下所有特殊点与1不连通的最小代价,转移状态显然。但是多次询问会超时,但是∑K\sum K与n同阶,所以就变成虚树的裸题。虚树的基本思想是,每次询问不需要遍历所有点,于是我们只存关于特殊点的图,边权显然是路径上的最小边权。关于原创 2017-12-12 18:21:40 · 523 阅读 · 0 评论 -
[点分治]BZOJ 2152——聪聪可可
题目描述给出一棵有边权的树。求边权和%3=0的路径数。解题思路累计以每个点为路径LCA的方案数,所以直接点分就好了。累计方法为分别找出距离某个点路径和为0,1,2的方案数,返回2∗t[1]∗t[2]+t[0]∗t[0]2*t[1]*t[2]+t[0]*t[0]然后减去所以子树方案就是当前方案。#include<cstdio>#include<algorithm>using namespace s原创 2017-12-12 20:17:40 · 610 阅读 · 0 评论 -
关于二分图的姿势
二分图最大匹配求二分图最大匹配常用简单算法为匈牙利算法。交错轨:从二分图右边的某个没有匹配的点,走出一条“一条没被匹配、一条已被匹配、一条没被匹配、……、一条没被匹配”交替出现的路径。大致思路:每次从一个还没有匹配过的点开始寻找交错轨,然后将路径上匹配的边和没有匹配的边反向,这样可以使匹配数加一,直到找不到为止。下面介绍二分图匹配的一些运用:解决最小边覆盖、最小路径覆盖、 最小原创 2017-07-30 12:10:25 · 714 阅读 · 0 评论 -
[2-sat]POJ 3683——Priest John's Busiest Day
题目传送门题目概述安排n个婚礼是这n个婚礼没有时间相交。 每个婚礼有2个安排时间段。解题思路不难看出这题是一道求2-sat任意解问题。 如果时间段i,ji,j相交,则有i−>j′i->j'j−>i′j->i' 如果看不懂上面这句话点这里接下来用tarjan缩点是毋庸置疑的,因为如果你选择了ii则所有与ii处在同一环上的点都要被选择。接下来就是如何求答案的问题。 网上有介绍刷拓扑然后染色。原创 2017-07-04 22:17:05 · 902 阅读 · 2 评论 -
[二分+2-sat]Hdu 3622——Bomb Game
题目传送门题目概述在一个无限大的平面里画n个圆。 每个圆有2个待选的放置位置。 限制条件为圆不相交,求最小半径的最大值。解题思路显然如果R满足限制条件,那么任意r(r<<R)肯定满足限制条件,想到用二分枚举答案。 接下来考虑如何验证。 不难发现这是一个2-sat问题。 假设位置i,ji,j以当前最小半径做圆相交,显然可以得到i−>j′i->j' j−>i′j->i' 如原创 2017-07-04 21:49:04 · 861 阅读 · 1 评论 -
最小费用最大流总结
最小费用最大流在费用流的图上,边不仅有流量还有权值。 最小费用最大流就是在最大流不唯一时,求权值最小的方案,其基本思想就是在最大流的基础上考虑费用最小。解决这种问题的操作可以描述为多次迭代的过程,下面来介绍解决这种问题的一种方法——Spfa增广。Spfa增广基本思想是:从零流为初始可行流开始,在每次迭代过程中对每条边赋予与cap(容量)、w(单位流量运输费用)、flow(现有流的流量)有关的权数d原创 2017-06-06 22:09:18 · 2100 阅读 · 1 评论 -
二分图最佳完美匹配——KM算法总结
KM 算法求解二分图最佳完美匹配的算法。 先来看一道例题Hdu 2255。 显然是KM的裸题。假设我们要匹配集合X和Y的点,先给每个点一个顶标Lx和Ly。 为什么要给顶标? 首先顶标是我们限制边的一个条件,我们走过的边一道要满足dst[i][j]==Lx[i]+Ly[j],其次所有顶标的加和就是我们答案,我们肯定希望顶标的加和越大越好,所以Lx的初值给的就是连向Y集合所有边的最大值,那么Ly原创 2017-06-03 21:14:24 · 3124 阅读 · 0 评论 -
[BFS+康托展开]Hdu 1043 Eight
题目传送门这道题就是我们耳熟能详的八数码问题,如果写BFS必然涉及到如何判断一个状态是否进队,可以把序列表示成一个9进制的数,用set或者直接hash,但是这样操作效率过低。0~8的排列最多只有9!种排列方式,所以如果我们能很快求出每个序列的大小,那么直接开vis标记就可以了。所以引进了康托展开。康托展开假设我们拿到一个序列是32451,求这个序列的在所有排列中的次序。 其实我们只要确定有几个排列原创 2017-05-26 18:41:20 · 639 阅读 · 0 评论 -
BZOJ 4443 [Scoi2015]小凸玩矩阵——二分+二分图匹配
4443: [Scoi2015]小凸玩矩阵题目描述 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两个数字不能在同一行或同一列,现小凸想知道选出来的N个数中第K大的数字的最小值是多少。 输入 第一行给出三个整数N,M,K 接下来N行,每行M个数字,用来描述这个矩阵 输出 如题 解题思路 看到这样选择方式马上就会想到二分图匹配,但是因原创 2017-05-11 19:33:37 · 730 阅读 · 0 评论 -
BZOJ 1854 [Scoi2010]游戏——二分图匹配
1854: [Scoi2010]游戏题目描述lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示。当他使用某种装备时,他只能使用该装备的某一个属性。并且每种装备最多只能使用一次。 游戏进行到最后,lxhgww遇到了终极boss,这个终极boss很奇怪,攻击他的装备所使用的属性值必须从1开始连续递增地攻击,才能对boss产生伤害原创 2017-04-25 23:11:28 · 763 阅读 · 0 评论 -
BZOJ 1787 [Ahoi2008]Meet 紧急集合——LCA
1787: [Ahoi2008]Meet 紧急集合原创 2017-04-20 21:18:56 · 429 阅读 · 0 评论 -
[差分约束]POJ 3159——Candies
题目概述有nn个数,给定mm个约束条件,类似xi−xj<=kxi-xj<=k。 使最大差值最大。解题思路不难看出这是一道差分约束的问题。 因为要使最大差值最大,所以先给任意一个值0,其他数给INFINF,刷最短路。 但是zzkdalaozzkdalao告诉我POJPOJ这题卡SpfaSpfa的,于是我写了Dij+heapDij+heap。#include<cstdio>#include<cs原创 2017-07-11 10:49:20 · 616 阅读 · 0 评论 -
[差分约束]POJ 1201——Intervals
题目梗概给定n个要求,在[ai,bi]的区间里必须要有ci个数。 求最少需要的数字个数。解题思路构造前缀和s[i]。题目要求为s[bi]-s[ai-1]>=ci,马上联想到差分约束。 构造ai-1->bi的边边权为ci。 因为要求答案最小,显然要刷最长路。 不要忽略题目中内在的条件,s[i+1]-s[i]<=1 —> s[i]-s[i+1]>=-1,s[i+1]-s[i]>=0。 因为原创 2017-07-11 14:10:27 · 551 阅读 · 0 评论 -
POJ 1273 Drainage Ditches——最大流
题目传送门 这道题就是裸的最大流,因为各路大神强烈推荐Dinic算法,所以我舍弃EK算法。Dinic 算法Dinic也是一种增广路算法,通过对残量网络进行分层之后用DFS求增广路直到无法增广。 层次图:层次就是起点到每个点的最短路径的长度,只走层与层之间的边,显然可以用BFS求层次图。时间复杂度对于n个点的层次图最多只有n层,所以最多重新建图n次,然后每次增广的效率为O(nm),s所以Dinic原创 2017-05-31 20:49:35 · 983 阅读 · 0 评论 -
[最大流]BZOJ 1066——[SCOI2007]蜥蜴
1066: [SCOI2007]蜥蜴题目描述 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外。 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平面距离不超过d的任何一个石柱上。石柱都不稳定,每次当蜥蜴跳跃时,所离开的石柱高度减1(如果仍然落在地图内部,则到达的石柱高度不变),如果该石柱原来高度为1,则蜥蜴离开后消失。以后原创 2017-07-02 19:05:39 · 628 阅读 · 1 评论 -
[2-sat]HDU 1814——Peaceful Commission
题目传送门题目概述有n个党派,每个党派有两名成员且必须派出一名成员参加和平会议,给出m个不合的人,求字典序最小的方案。解题思路裸的2-sat,假设每个党派有成员A,BA,B,如果有AA和A′A'不合,则可以推出A−−>B′A-->B'A′−−>BA'-->B −−>-->表示选择前者就必须选择后者,显然也是这么建边的。 因为要求字典序最小的方案,所以O(NM)刷了。#include<cstdio原创 2017-07-02 21:07:36 · 592 阅读 · 1 评论 -
[tarjan+bitset]BZOJ 2208——[Jsoi2010]连通数
2208: [Jsoi2010]连通数题目描述解题报告这题的题目描述非常清晰,看到网上有dalao用bitsetbitset优化FloydFloyd就过了。博主用tarjantarjan缩点然后用bitsetbitset优化传递闭包就可以。但是看到很多人缩点完刷拓扑啊,其实这个操作很鸡肋。学过2−sat2-sat应该有所了解,拓扑序就是tarjantarjan刷出来的sccscc序(画个图就知道了)原创 2017-07-07 16:28:20 · 797 阅读 · 1 评论 -
[最小割]BZOJ 3175—— [Tjoi2013]攻击装置
题目描述给定一个矩阵,这个矩阵上有一些位置可以放置装置。装置会日字形互相攻击,求最多可放置多少个装置。解题思路因为日字形相互攻击的两个点肯定满足一个坐标和是奇数,另一个是偶数。将矩阵看成零一奇偶矩阵,那么互相攻击的装置可以形成一个二分图。答案显然是总数-最小割。怎么思考?最小割不存在同时选择两个装置且互相攻击(因为不满足最大流)。#include<cstdio>#include<cstring>原创 2017-12-13 20:51:59 · 754 阅读 · 1 评论