- 博客(501)
- 资源 (2)
- 收藏
- 关注
原创 【网络流24题】圆桌聚餐 (最大流)
题意假设有来自 nn n 个不同单位的代表参加一次国际会议。每个单位的代表数分别为 riri r_i 。会议餐厅共有 mm m 张餐桌,每张餐桌可容纳 cici c_i 个代表就餐。 为了使代表们充分交流,希望从同一个单位来的代表不在同一个餐桌就餐。试设计一个算法,给出满足要求的代表就餐方案。题解最大流代码#include<bits/st...
2018-09-13 00:49:45
543
原创 【网络流24题】魔术球(最小路径覆盖)
题意假设有 nn n 根柱子,现要按下述规则在这 nn n 根柱子中依次放入编号为 1,2,3,4,⋯1,2,3,4,⋯ 1, 2, 3, 4, \cdots 的球。每次只能在某根柱子的最上面放球。在同一根柱子中,任何 22 2 个相邻球的编号之和为完全平方数。试设计一个算法,计算出在 nn n 根柱子上最多能放多少个球。题解根据题意建立DAG,从而建立最小...
2018-09-13 00:29:46
191
原创 【网络流24题】最小路径覆盖(最小路径覆盖)
题意给定有向图 G=(V,E)G=(V,E)G = (V, E)。设 PP P 是 GG G 的一个简单路(顶点不相交)的集合。如果 VV V 中每个顶点恰好在 PP P 的一条路上,则称 PP P 是 GG G 的一个路径覆盖。PP P 中路径可以从 VVV 的任何一个顶点开始,长度也是任意的,特别地,可以为 00 0 。GG G 的最小路径覆盖是 GG G 的所含路径条数...
2018-09-12 00:19:37
1185
原创 【网络流24题】太空飞行计划(最大权闭合子图)
题意W 教授正在为国家航天中心计划一系列的太空飞行。每次太空飞行可进行一系列商业性实验而获取利润。现已确定了一个可供选择的实验集合 E=E1,E2,⋯,EmE={E1,E2,⋯,Em}E=E1,E2,⋯,EmE=E1,E2,⋯,EmE={E1,E2,⋯,Em}E=E1,E2,⋯,EmE={E1,E2,⋯,Em} E = \{ E_1, E_2, \cdots...
2018-09-12 00:03:25
258
原创 【网络流24题】搭配飞行员(二分图最大匹配)
题意飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员。由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭配驾驶员才能使出航的飞机最多。因为驾驶工作分工严格,两个正驾驶员或两个副驾驶员都不能同机飞行。题解二分图最大匹配。 建立源点和汇点,源点连左边点集,容量为1;右边点集连汇点,容量为1....
2018-09-11 23:51:40
537
原创 【算法练习】Luogu P3831 [SHOI2012]回家的路(分层图最短路)
题意2046 年 OI 城的城市轨道交通建设终于全部竣工,由于前期规划周密,建成后的轨道交通网络由2n2n2n条地铁线路构成,组成了一个nnn纵nnn横的交通网。如下图所示,这2n2n2n条线路每条线路都包含nnn个车站,而每个车站都在一组纵横线路的交汇处。出于建设成本的考虑,并非每个车站都能够进行站内换乘,能够进行站内换乘的地铁站共有mmm个,在下图中,标上方块标记的车站为换乘车站。已知...
2018-09-10 12:50:36
443
原创 【算法练习】LightOJ - 1257 Farthest Nodes in a Tree (II) (点分治)
题意求出树上所有点的最远距离。n≤30000n≤30000n \le 30000。题解点分治。 树上最长路径,要么经过当前的重心,要么不经过。所以可以点分治来做。 首先求出重心每一个子树上节点到重心的距离,同时求出每一个子树中到重心的最远点。对于一个子树上的节点,如果他的最长路径经过当前重心,那么一定是他到重心的距离+其他子树中到根节点的最远点的最大值;如果不经过,递归到子树求...
2018-09-10 00:33:52
161
原创 【算法练习】Luogu P4149 [IOI2011]Race(点分治)
题意给一棵树,每条边有权。求一条简单路径,权值和等于 K,且边的数量最小。题解点分治代码方法1先遍历根节点,然后去除路径节点全在子树的方法。常数稍微大一点。// luogu-judger-enable-o2#include&lt;bits/stdc++.h&gt;using namespace std;typedef double db;typedef ...
2018-09-09 22:06:21
277
原创 【算法练习】HDU - 4812 D Tree (点分治)
题意求树上是否有路径点权成绩mod1e6+7 = k。若有多对路径,输出节点编号最小的一组。题解逆元 + 点分治即可。代码#include<bits/stdc++.h>using namespace std;typedef double db;typedef long long ll;typedef unsigned long long ull;c...
2018-09-09 22:03:01
208
原创 【算法练习】POJ - 2114 Boatherds(点分治)
题意给出一棵树,一些询问,询问树上是否有路径和为k的路径。题解发现询问只有100个,依次处理询问即可。代码这里依旧给出了两种写法, 一种是排序后利用单调性,一种是排序后二分。 利用单调性常数更小。 如果利用单调性,函数要返回cnt<<1cnt<<1cnt...
2018-09-09 21:55:45
156
原创 【算法练习】POJ - 1741 Tree(点分治)
题意给一颗树,求树上权值为k的路径条数。题解点分治。代码分别为排序后使用单调性求解,或者是二分求解(注释部分)。 使用单调性O(n)O(n)O(n)更快一些。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef doub...
2018-09-09 21:49:50
204
原创 【算法学习】点分治的两种写法与常见套路总结
概述点分治是一种基于树的重心,统计树上路径的优秀算法。将树上的路径分为经过树的重心和不经过树的重心两种,同时利用树的重心性质,使得递归深度不超过lognlognlogn次。总时间复杂度取决于每次递归统计答案的时间复杂度。若每次统计是O(n)O(n)O(n)的,那么总时间复杂度是O(nlogn)O(nlogn)O(nlogn)。若统计的时间复杂度是O(nlogn)O(nlogn)O(nlogn)...
2018-09-09 21:00:30
2687
原创 【算法练习】CodeVs1391 伊吹萃香(分层图最短路)
题意在幻想乡,伊吹萃香是能够控制物体密度的鬼王。因为能够控制密度,所以萃香能够制造白洞和黑洞,并可以随时改变它们。某一天萃香闲着无聊,在妖怪之山上设置了一些白洞或黑洞,由于引力的影响,给妖怪们带来了很大的麻烦。于是他们决定找出一条消耗体力最少的路,来方便进出。已知妖怪之山上有N个路口(编号1..N),每个路口都被萃香设置了一定质量白洞或者黑洞。原本在各个路口之间有M条单向路,走过每一条路需要消...
2018-09-04 00:18:36
312
原创 【算法学习】树的重心与点分治
树的重心树的重心也叫做树的质心。其本质是一个点,删除这个点后,形成的子树中最大的节点数目最小。解法一遍dfs即可。dfs的时候记录一下当前节点uuu的size[u]size[u]size[u],同时记录他的所有儿子子树中的最大节点数目mxchildmxchildmxchild,那么删除当前节点uuu所形成的子树就是max(mxchild,n−size[u])max(mxchild,n−...
2018-08-31 19:58:03
1455
原创 【算法练习】Luogu 2634 [国家集训队]聪聪可可(点分治)
题意聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃、两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已经玩儿腻了这种低智商的游戏。他们的爸爸快被他们的争吵烦死了,所以他发明了一个新游戏:由爸爸在纸上画n个“点”,并用n-1条“边”把这n个“点”恰好连通(其实这就是一棵树)。并且每条“边”上都有一个数...
2018-08-31 19:49:21
204
原创 【算法练习】Luogu 3806 【模板】点分治1(点分治)
题意给定一棵有n个点的树 询问树上距离为k的点对是否存在。题解点分治代码#include&lt;bits/stdc++.h&gt;using namespace std;typedef double db;typedef long long ll;typedef unsigned long long ull;const int nmax = 1e6+7;c...
2018-08-31 19:46:32
223
原创 【算法练习】CodeVs3639 树的重心
题意输出删除树的中心后,子树最大的size数目,如果有多个树的重心,升序输出他们的值。题解dfs一遍。 记录当前节点的size和子树最大的size,另一半就是nodenum - size[u],取个最大值就是子树最大的size数目。一边统计一遍更新答案。代码#include<bits/stdc++.h>using namespace std;typ...
2018-08-31 14:30:58
202
原创 【补题】Codeforces Round #506 (Div. 3)
A. Many Equal Substrings题解找出最长的和后缀相等的前缀,反复输出除去前缀的剩下部分即可啦。代码#include<bits/stdc++.h>using namespace std;typedef double db;typedef long long ll;typedef unsigned long long ull;const...
2018-08-28 19:01:26
210
原创 【算法练习】POJ - 2723 Get Luffy Out (2-SAT)
题意题解题没什么难的。说一下一个坑点。 题目说的是有nnn对钥匙,就有2∗n2∗n2*n个钥匙,就有4∗n4∗n4*n个布尔变量。 被这个坑了半天。代码#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef double ...
2018-08-27 14:04:25
162
原创 【算法学习】2-SAT
2-SAT2-SAT一般给出nnn个布尔变量(取0或者取1),再给出mmm个关于这些布尔变量的约束条件(见下文),求出是否能找到解满足这些约束条件。2-SAT可以建图,转换成强连通分量进而判断矛盾问题。对于布尔变量,只有2个取值,取0或者取1,所以对于任意一个布尔变量xixix_i,我们可用其原变量iii(即取1值)和其反变量i′i′i'(即取0值)依据约束条件来构建图。约束条件...
2018-08-26 20:01:06
3976
原创 【算法练习】HDU - 1814 Peaceful Commission (2-SAT)
题意一国有n个党派。每一个党派在议会中都有2个代表,现要组建和平委员会,要从每一个党派在议会的代表中选出1人,一共n人组成和平委员会。已知有一些代表之间存在仇恨,也就是说他们不能同一时候被选为和平委员会的成员,现要你推断满足要求的和平委员会是否能创立?假设能,请给出字典序最小的方案。题解输出字典序最小的,按照白书上的套路来就行了。 这题无限wa,原因是因为在寻找解的时候,每次找要先把...
2018-08-26 19:12:58
218
原创 【算法练习】HDU - 1816 Get Luffy Out *(2-SAT)
题意题解直接把POJ的那道题交上去就过了。 先说一下POJ那道题的做法。 二分能开的门个数,然后判断是是否合法。由于开门的是有先后顺序的,前边的没开,后边的门也开不了,所以在二分一个开门个数的时候,要限制图中某些边是否能选中。这个在对门建图的时候,对边加一个id,每次二分tarjan时,判断一下边的id是否小于当前二分的id,若小于等于的话,就表示这条边是在二分位置之间的限制关系,...
2018-08-26 16:47:25
161
原创 【算法练习】POJ - 3648 Wedding (2-STA)
题意题解代码#include<cstdio>#include<cstring>#include<queue>#include<algorithm>using namespace std;typedef double db;typedef long long ll;typedef unsigned long long ul...
2018-08-26 14:47:10
221
原创 【算法训练】POJ - 3678 Katu Puzzle (2-SAT)
题意有nnn个布尔变量,mmm个条件,求是否有可行解。题解2-SAT 如果必须uuu,那么u′−>uu′−>uu'->u。 tarjan缩点判一哈儿原变量和反变量是否在一个scc中好了。代码#include<cstdio>#include<cstring>#include<algorithm>using na...
2018-08-25 23:23:19
189
原创 【算法练习】POJ - 3683 Priest John's Busiest Day (2-SAT)
题意有一个小镇上只有一个牧师。这个小镇上有一个传说,在九月一日结婚的人会受到爱神的保佑,但是要牧师举办一个仪式。这个仪式要么在婚礼刚刚开始的时候举行,要么举行完婚礼正好结束。 现在已知有n场婚礼,告诉你每一场的开始和结束时间,以及举行仪式所需要的时间。问牧师能否参加所有的婚礼,如果能则输出一种方案。题解2-SAT + 路径输出 首先建图不难,判断两个时间段是否相交。 然后按照...
2018-08-25 22:28:52
194
原创 【算法练习】POJ - 3207 Ikki's Story IV - Panda's Trick (2-SAT)
题意给出一个nnn的点的环,mmm条线,每条线连接环上的点。线可以从环内部连接也可以从环外部连接。求能否使得这mmm条线不相交。题解首先要知道一个引理:如果两条线从环都从内部连接相交的话,那么他们从外部连接一样会相交。 有了这个引理,为了让两条原本相交的线la、lbla、lbl_a、l_b变得不相交,就必须然们一条从内部连接,一条从外部连接。 设布尔变量a、ba、ba、b表示直...
2018-08-24 17:03:58
200
原创 【算法练习】Uva11324 The Largest Clique (强连通分量+DP)
题意给一张有向图G,求一个结点数最大的结点集,使得该结点中任意两个结点 u 和 v满足:要么 u 可以到达 v, 要么 v 可以到达 u(u 和 v 相互可达也可以)。题解强连通分量缩点后DP代码#include<bits/stdc++.h>using namespace std;typedef double db;typedef long long ll...
2018-08-23 14:40:34
256
原创 【算法练习】HDU - 3844 Mining Your Own Business (双连通分量-割点)
题意有一座地下的稀有金属矿由n条隧道和一些连接点组成,其中每条隧道连接两个连接点,任意两个连接点之间最多只有一条隧道。为了降低矿工的危险,你的任务是在一些连接点处安装太平井和相应的逃生装置,使得不管哪个连接点倒塌,不在此连接点的所有矿工都能到达太平井逃生(假定除了倒塌的连接点不能通行外,其他隧道和连接点完好无损)。为了节约成本,比应当在尽量少的连接点安装太平井。还需要计算出当太平井的数目最小时...
2018-08-23 13:51:46
919
原创 【算法练习】LA3523 Knights of the Round Table (双连通分量-割点、二分图染色)
题意有n(n≤1000)n(n≤1000)n(n≤1000)个骑士,m(m≤1000000)m(m≤1000000)m(m≤1000000)对骑士互相憎恨,要3个以上的骑士且保证互相憎恨的骑士不会坐在相邻位置才能开会议,求多少骑士一定不能参加任何一次会议。题解思路其实很简单,找到一个无向环,然后看环是否是奇数环就可以了。看lrj的白书把自己看晕了,下面说一下自己的理解。一个无向环一...
2018-08-23 12:13:35
302
原创 【算法练习】 HihoCoder 1190 连通性·四(点双连通分量)
题意对于每个点双连通分量,输出其中的边编号最小的值。题解tarjan算法。 本质还是求割顶,然后边tarjan边计算。 注意因为根节点不一定是割顶。为了达到题目的输出要求,不用判断根节点是不是割顶了。这样的话,可以直接可以把1所在的组全部赋值上。代码#include<bits/stdc++.h>using namespace std;typedef do...
2018-08-22 21:46:38
176
原创 【算法练习】HihoCoder 1185 连通性·三 (强连通分量)
题意从1为起点,找到一条有向路径,其经过节点和最大。题解tarjan算法缩点,形成有DAG,在DAG上DP即可,代码#include<bits/stdc++.h>using namespace std;typedef double db;typedef long long ll;typedef unsigned long long ull;co...
2018-08-22 21:42:37
151
原创 【算法练习】HihoCoder 1184 连通性二·边的双连通分量 (边双连通分量)
题意根据每个点所在的边双连通分量,输出其组内最小的顶点编号。题解Tarjan算法。 2边dfs即可。代码#include<bits/stdc++.h>using namespace std;typedef double db;typedef long long ll;typedef unsigned long long ull;const int...
2018-08-22 21:40:00
163
原创 【算法练习】HihoCoder 1183 连通性一·割边与割点
题意给出无向图,求出图中的割边与割点。题解Tarjan算法。代码#include<bits/stdc++.h>using namespace std;typedef double db;typedef long long ll;typedef unsigned long long ull;const int nmax = 1e6+7;cons...
2018-08-22 21:37:20
195
原创 【算法学习】连通分量、割顶与桥、双连通分量、强连通分量
连通分量连通分量:需要保存边用dfs,不需要保存边用并查集二分图二分图:非连通图是二分图当且仅当每个连通分量都是二分图。 一个连通图是二分图,当且仅当它可以二染色。 一个连通图是二分图,当且仅当它不含奇数环,所谓奇数环,即环上的点(或边)个数为奇数。反证法证明一个二分图当且仅当不含奇数环。证明: 假设二分图含有奇数环,设顶点编号分别为x1,x2,x3…,x2k−1x1...
2018-08-22 21:32:01
999
1
原创 【算法练习】LA4255 Guess (差分约束)
题意对于n个数字,给出sum[j]-sumi的符号(正负零),求一组n个数的的可行解(n个数都在-10—10之间)题解初始化为-10,变量取值下界为-10,利用题目中的三角不等式建图,跑最短路即可。 注意计算出来的是前缀和。代码#include<bits/stdc++.h>using namespace std;typedef double db;typ...
2018-08-21 13:23:53
232
原创 【算法练习】洛谷P1608 路径统计(SPFA最短路计数)
题意求最短路径的数目,可能用重边。题解SPFA,为了保证不会重复计算,需要维护一个当前队列中到这些顶点的次数,每次出队时清零。代码// luogu-judger-enable-o2#include<bits/stdc++.h>using namespace std;typedef double db;typedef long long ll;t...
2018-08-18 20:48:21
803
原创 【算法练习】POJ3463 Sightseeing(最短路与次短路计数)
题意已知一张图(单向边),起点S和终点F,求从S到F的最短路和比最短路长1的路径的条数之和。 题解dijkstra维护四个东西,一个是最短距离,一个是次短距离,一个是最短路径的个数,一个是次短路经的个数。 如果用spfa的话(假的spfa),需要上优先队列,每次选距离最小的,这样写的话,就是一个单个顶点能多次入队的dijkstra。不如直接写dijkstra。代码#i...
2018-08-18 20:45:26
291
原创 【算法练习】HDU2489 Minimal Ratio Tree(DFS+PRIM)
题意给定一个完全图,图中有点权和边权, 找出m个点,构成的一棵树,使得他们的边权之和除以点权值和最小。题解最小生成树可以解决分子边权之和最小,又因为是稠密图,所以考虑Prim。 如何确定点权之和最小,由于是点数很少,直接暴力枚举即可。最差是C715C157C_{15}^7。代码#include<bits/stdc++.h>using namespac...
2018-08-17 14:00:18
138
原创 【算法练习】 HDU3938 Portal(并查集+离线)
题意一张无向图,求有多少条路径使得路径上的花费小于L,这里路径上的花费是这样规定的,a、b两点之间的多条路径中的最长的边最小值。题解询问次数很多,考虑离线操作。 离线操作也是套路,因为路径花费是其中最大的,所以考虑从小到大加边,当前加边的边的边权一定大于等于已经加过的最大边的边权。利用这个性质,可以进行离线操作,每次加边即为将边所连接的两个点加入到并查集中。加入的边对答案的贡献为...
2018-08-16 23:40:29
306
原创 【滚动训练】HDU 3926 Hand in Hand(并查集)
题意有n个小孩,他们之间手拉手,形成一个图,图的每个点都是0、1、2个度。在给出一个图,判断是否两个图同构。题解并查集,每次合并的时候判断一下是否构成环,然后记录一下每个联通分量的节点个数,成环的单独判断即可代码#include<bits/stdc++.h>using namespace std;typedef double db;typedef ...
2018-08-15 23:43:08
160
algebra_2005_2006.zip
2020-04-11
Dynamic Graph Algorithms
2018-08-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅