图论/搜索
文章平均质量分 55
JK Chen
ACM退役选手,战绩4金5银
展开
-
Go Running(二分图最小点覆盖 网络流 点覆盖)
http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1007&cid=882题意:给出一些点,你只能用斜率为1或者-1的线去覆盖。问最少的线的数量。解析:把点(xi,yi)(x_i,y_i)(xi,yi)看出边,相连的二分图的两边的点为(xi+yi,xi−yi)(x_i+y_i,x_i-y_i)(xi+yi,xi−yi)。也就是说,选择了点x+y=xi+yix+y=x_i+y_ix+y=xi+yi或者x−y=原创 2020-07-30 20:13:57 · 567 阅读 · 0 评论 -
Almost Permutation(最小费用最大流)
https://vjudge.net/problem/CodeForces-863F题意:一个数组,每个数∈[1,n]\in[1,n]∈[1,n]。给出条件为区间的下限或者上限,要求:解析:假设第iii个数的取值范围为[l,r][l,r][l,r]。连图方式是sp连接位置,位置连接取值(流量1,费用0),取值连接ep(流量1,费用依次为1、3、5……99)代码:/* * Au...原创 2020-04-25 20:39:05 · 231 阅读 · 0 评论 -
E. Weights Distributing(图论)
http://codeforces.com/contest/1343/problem/E题意:给出一个无向图,m条边,有m个值,要求一一对应。现在从a到b再到c的路程最短。解析:显然找到一个点d,bd算两次,ad和cd算一次。代码:/* * Author : Jk_Chen * Date : 2020-04-21-23.15.41 */#include<bits/...原创 2020-04-22 20:30:21 · 314 阅读 · 0 评论 -
JT的难题(匹配问题 最大独立集)
https://turingjudge.com/contest/3/problem/1002QkCvNnnjg5题意:在一个棋盘上给出一些马,问最少删掉几个使得两两不能吃。解析:如果是一对一冲突,输出方案是2SAT问题。如果是一对多输出,输出最大数量,是最大独立集问题。最少删掉几个就是最多留下几个,也就是最大独立集。将冲突的马之间匹配上,求一个最大独立集(n-最大匹配)。由于不是...原创 2020-04-21 18:47:22 · 367 阅读 · 0 评论 -
Cantina of Babel(强连通)
https://nanti.jisuanke.com/t/44119题意:N个人,每行先是名字,再是母语,在是最多20个掌握语言(母语也是掌握语言)。你需要删除最少的人,使得剩下的两两互连。A理解C:当A的母语=B的掌握,B的母语=C的掌握(可以AC、ABC、ABDC)两两理解才能互连将母语和掌握语看出一个点。从母语往(存在于)的掌握集合连边。最后求一个最大的强连通即可。代码:/*...原创 2020-04-20 21:35:27 · 285 阅读 · 0 评论 -
I. Graph and Cycles(图论)
https://www.jisuanke.com/contest/7196/466924题意:给出一个n个点带权无向完全图,对于一个环(只考虑边可以有重点),其权值为任意两条相邻边的权值max的和。现在将图分成多个环(无边交集,并集为完全图),图的值为每个环的权值之和,求其最小值。解析:思路:每条边,如果其权值大,那么尽可能接连权值较大的边。将边按照权值排序,从大的开始取。对于当前边...原创 2020-04-12 13:05:31 · 415 阅读 · 0 评论 -
H. In-degree(网络流 图论)
http://codeforces.com/gym/102419/problem/H题意:给出一个无向图,和每个点的入度(-1则不要求),使之变为有向图满足要求。解析:x到ep连边:流量为x的入度,花费-1sp到边连:流量为1,花费0边到两个端点连边:流量1,花费0如果x不要求:流量m,花费0这样保证花费最小的时候每个点都满足入度条件。方案输出为:查看反馈网络的流量,如果有流量,...原创 2020-03-28 16:59:54 · 931 阅读 · 0 评论 -
E - A Floor of Many Doors(bfs 多队列)
https://vjudge.net/problem/Gym-102536E题意:给你一个nm图,D是门,从A到B的最短时间。开关附件的门需要1s,上下左右移动要1s。同一时间只能有最多k个门开着。解析:k最多50,所以可以x,y,d表示到点x,y已经开门d个的最少时间。当已经开k个门时,再开门需要把原来那个关上,相当于多1s时间变为3s。复杂度来说只能bfs做,这里的边权最多为3,所...原创 2020-03-16 13:38:01 · 477 阅读 · 0 评论 -
Swapping Places(字典序最小拓扑排序)
https://vjudge.net/problem/Gym-102501G题意:给你一个列表,L个可以交换的对(相邻的才能交换),问最后list表的字典序最小解析:发现不能交换的两种物品,其组成的相对位置不会改变。相同种类物品之间也不会改变。所以将这些相对位置建成边。跑一个字典序最小的拓扑排序就行。(优先队列)代码:#include<bits/stdc++.h>usin...原创 2020-11-14 14:24:20 · 2811 阅读 · 5 评论 -
Is-A? Has-A? Who Knowz-A?(图论)
https://nanti.jisuanke.com/t/43372题意:类的继承,有两个关系a is-a b表示a是b的子类,a has-a b表示a有个b作为元素,关系可以继承。之后询问关系的正确性解析:用bitset维护出所有点的所有父亲和祖先,fa[i]has-a比较恶心,has-a会链式继承,并且可以继承fa的has-a。所以我暴力拓展边。每次加入has-a的has-a,和fa...原创 2020-03-01 16:36:34 · 233 阅读 · 0 评论 -
Longest Path(图论)
https://nanti.jisuanke.com/t/43394题意:给出一个完全图,任意两个点之间有且只有一条有向边,求一个最长简单路径。解析:维护答案路径。对于新的点,如果可以塞在开头则塞在开头(指向原开头)。如果可以塞在最后则塞在最后(原结尾指向该点)。否则考虑拓边(A-B变为A-C-B)。证明:代码:/* * Author : Jk_Chen * Date ...原创 2020-02-27 12:56:22 · 872 阅读 · 0 评论 -
Cops and Robbers(最大流 最小割)
https://vjudge.net/problem/Kattis-copsandrobbers题意:将某些位置堵上,不能使得B出去,不同字母不同花费,求最小花费。解析:使B与外面分离,就是最小割模板,最小割等于最大流。建图:每个点拆成出点和入点,两个点之间如果是字母,流量为权值,否则流量为inf。代码:/* * Author : Jk_Chen * Date : 20...原创 2020-02-23 20:23:26 · 618 阅读 · 0 评论 -
D - Ambiguous Encoding(字符串 最短路)
https://vjudge.net/problem/Aizu-1406题意:给出n个01字符串,问是否存在一个大字符串,可以由这些01串以不同的方式组成。01串长度<=16,n<=1000解析:我的做法很有意思。我是用(长度+十进制数值)塞入unordered_set记录的,所以要去除重合的问题,即上图中直接开始搜01101如果正向暴力匹配的结果:(找一个以当前串作为...原创 2020-02-17 12:53:31 · 380 阅读 · 0 评论 -
Slow Leak(floyd 加油站)
https://vjudge.net/problem/Kattis-slowleak题意:从1到n,路径长度。有多个点可以加油,每次加完油后只能走一定的路程。500个点。解析:先做一遍Floyd,然后把加油站抽出来再做一遍Floyd即可。代码:/* * Author : Jk_Chen * Date : 2020-02-06-14.51.14 */#include<...原创 2020-02-06 18:49:38 · 622 阅读 · 0 评论 -
F. Leaf Sets(搜索 叶子分集合)
http://codeforces.com/problemset/problem/1042/F题意:给出一棵树,将所有叶子节点分成若干个集合,每个集合的任意两个叶子之间的距离不超过K,求集合的个数最小值。解析:考虑每次从最深的点开始搜索,这样可以保证搜K次搜到的点之间的距离不超过K。证明:复杂度的话,自己不管怎么造数据,都顶多O(N)O(N)O(N),所以直接上了。代码:#inc...原创 2019-11-21 21:19:33 · 323 阅读 · 0 评论 -
F. The Shortest Statement(图论 树上加边)
http://codeforces.com/problemset/problem/1051/F题意:给出n个点,m条边,m−n≤20m-n\leq 20m−n≤20,边权。每次询问两个点之间的距离。解析:相当于树上添加21条边。对于一对点,原树上的距离可以用lca算出。考虑通过新加的边的路径。我们可以对涉及到的点,建立一个新的图(最多44个点),每次在新图跑一个最短路即可。代码:#in...原创 2019-11-21 21:12:18 · 365 阅读 · 0 评论 -
Board Game(线段树 bfs)
http://codeforces.com/problemset/problem/605/D题意:给出n个点,(a,b,c,d)(a,b,c,d)(a,b,c,d),你有两个值(x,y)(x,y)(x,y),当一个点的a≤x⋀b≤ya\leq x\bigwedge b\leq ya≤x⋀b≤y,你可以到达这个点,并且x→c,y→dx\to c,y\to dx→c,y→d。问到达最后一个点的最短...原创 2019-11-20 14:16:28 · 212 阅读 · 0 评论 -
F. Daniel and Spring Cleaning(数位)
http://codeforces.com/contest/1245/problem/F题意:给出[L,R],求出有序对<x,y>,x xor y=x+y的个数。解析:这种题显然是从位考虑。我们可以用类似数位dp的方法,枚举两个数字的高位。这样做法统计[0,X][0,Y][0,X][0,Y][0,X][0,Y]的方案,我们求的是[L,R][L,R][L,R][L,R][L,...原创 2019-11-07 13:18:26 · 281 阅读 · 0 评论 -
C2. Tidying Up(费用流 二分图)
http://codeforces.com/problemset/problem/316/C2题意: 有n*m格子,[1,n*m/2]每个数都出现两次,现在可以选择一些点,被选择的点之间可以任意交换。使得最后每种数的两个位置都相邻,求选择的最少个数。解析:假设选择好框架,例如这里为:这种情况下需要选择的点的个数为:不匹配的1*2条的个数。也就是想办法构造一种结构,不匹配的数量最少。还...原创 2019-10-24 13:01:22 · 223 阅读 · 0 评论 -
E. Balanced Binary Search Trees(记忆化搜索 树上某个点的某层儿子)
http://codeforces.com/problemset/problem/1237/E题意: 构造一棵n节点(1到n)的二叉搜索树,要求深度之和最小,且对于每个节点,与其左儿子奇偶性不同,右儿子相同。求方案数。解析: 由于要求深度最小,所以对于一个序列一定是以中间点作为根,以平分两边。对于一个段[L,R],可以用三种信息表示:L的奇偶性,固定好的中点的奇偶性,段的长度。搜索比较简单,直...原创 2019-10-23 17:45:42 · 337 阅读 · 0 评论 -
D. Catowice City(强连通 思维)
http://codeforces.com/contest/1239/problem/D题意: 有n个人和n个猫,每个人认识一些猫,其中保证包含自己的猫。凑出x个人,y个猫(x+y=n),这些人对于这些猫都不认识,并且至少一个人和猫。解析: 幕后的最重要的信息是:由于自己一定认识自己的猫,所以为了达到(x+y=n),第i个人与第i个猫必选其一。在这种情况下,手玩了一下方案:对于一条边(x,...原创 2019-10-22 17:44:14 · 349 阅读 · 0 评论 -
差分约束知识总汇(差值关系,负环,处理方法,系数不为1的情况)
模型有多个未知量,x1...xnx_1...x_nx1...xn,有一些关系将其连接在一起:xi−xj≤k,xi−xj≥kx_i-x_j\leq k,x_i-x_j\geq kxi−xj≤k,xi−xj≥k。差分约束以x1−x2≥3x_1-x_2\geq3x1−x2≥3为例,得到x1≥x2+3x_1\geq x_2+3x1≥x2+3。如果将两个未知量看成图论中的点,那么...原创 2019-10-15 21:30:22 · 334 阅读 · 0 评论 -
Floyd龟兔判圈算法
如果有限状态机、迭代函数或者链表存在环,那么是需要算法检测环是否存在。检测算法有三种:Floyd龟兔算法、Brent算法、Gosper算法。检测环的存在性两个人在长度为100的环形操场上跑步 , 一个人的速度是v , 另一个是2*v , 以慢的人为参考系相当于一个人静止,一个人速度v我们让v==1,就可以得到这样一个结论,如果结构有环,则这两个人一定可以再次相遇代码:...原创 2018-08-22 21:47:32 · 579 阅读 · 0 评论 -
CodeForces-767C Garland 三分一棵树的价值
总算是自己写过了这道所谓的中等题。原题:Garland题意:给定一个n个点的树以及每个点的价值。问能否去掉两条边使得剩下的三个部分价值和相等,若可以输出要切掉的那条边所连接的子树根节点, 不可以则输出-1。首先,如果温度总和不能除以3就输出-1。对于答案,有两种可能,第一种是在母体切出两个sum/3的子体,第二种是切出一个sum/3*2的子体,再在这个子体切出sum/3的子体这...原创 2018-02-14 22:37:44 · 296 阅读 · 0 评论 -
N阶汉诺塔变形
今天来秋后算账,解决了这题。原题:N阶汉诺塔变形题意:每次只能往相邻塔移动的汉诺塔,输入阶数n和操作数k,输出k次操作后的n阶汉诺塔的样子回顾:递归汉诺塔每次只能移动到相邻塔,会比原来的要复杂一点,对于n层从1到3,我们分成如下步骤:1~n-1 从1到3n 从1到21~n-1 从3到1n 从2到31~n-1 从1到3对于1、3、5步,可以看成就是重复n 从...原创 2018-02-20 09:43:53 · 398 阅读 · 0 评论 -
过山车 (二分图最大匹配 匈牙利算法)
开始时比较难理解的算法原题:过山车题意:n个女生,m个男生,每个女生都有几个固定的可以搭配的男生,有k组搭配总共,输入a,b代表a女生可以和b男生搭配,问最后最多有几对搭配。先附代码:#include&amp;amp;amp;lt;iostream&amp;amp;amp;gt;#include&amp;amp;amp;lt;cstdio&amp;amp;amp;gt;#include&amp;amp;a原创 2018-02-20 19:55:46 · 403 阅读 · 0 评论 -
TSP问题
TSPTSP问题非常经典,(旅行商问题)是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短。 如图,从0开始,把1,2,3都走一遍然后回到0,求最短路径。方法有很多暴力法:城市顺序全排列,找到最短距离,可以给服务器跑个两天没问题回溯法:走一遍,不行回来换条路,几个小时吧分支定界法:空间消耗比较大动态规划法:空间复杂度要求太高了,城...原创 2018-02-24 11:09:17 · 5953 阅读 · 0 评论 -
裂点建图求最短路
原题:游戏机器人【模拟题】——高级题意:每个格子有一个命令, “Straight”: 保持机器人当前的方向,并前进一格。 “Right”: 右转90度,并前进一格 “Back”: 转180度,并前进一格 “Left”: 左转90度,并前进一格 “Halt”: 停在原地,并结束游戏。 机器人初始朝向东(右),如果按照格子的命令走,花费为0,如果需要按照主人的命令走,4个...原创 2018-03-05 21:06:37 · 420 阅读 · 0 评论 -
求一棵树两个点的最远距离
原题:1361 树的最远距离题意:给一棵树,求两个点这间的距离的最大值解析:想了很久,发现两个点a,b也就只有几种情况a为b的父结点a与b属于同一父结点的两条不同分支看到题目,很多人当然会想到离root最远的那个结点。我们现在就利用这个结点来设计算法。证明:最远路一点以最远结点为端点如果是第一种情况,a,b为同一分支,那么a和b同时往相反方向走到极限,便是一个...原创 2018-03-08 10:03:09 · 1563 阅读 · 0 评论 -
灯塔
原题:1269题意:有n个灯塔m条关系,每条关系a,b代表a她可以往b塔传消息,问你告诉几个塔就可以传遍所有塔。解析:首先把所有塔分为两种:有通向此塔的其他塔的塔——子塔,和必须由你来告诉的塔——母塔。对于第二种,我们做一遍dfs,删去下面可以延伸的子塔,剩下的只有两种塔了:原先的母塔,和自成环路的子塔群。我们再对所有的塔删一遍,同时记录dfs的次数就是ans。代码:...原创 2018-03-12 16:49:58 · 561 阅读 · 0 评论 -
求最短路——迪杰斯特拉算法的优化
原题:最短路题意:给定M条边,N个点的带权无向图,求1到N的最短路解析:按照以前的链式前向星加disjktra模板,居然T了#include&amp;lt;iostream&amp;gt;#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;string.h&amp;gt;#include&amp;lt;queue&am原创 2018-03-22 08:45:45 · 717 阅读 · 0 评论 -
躲雨
原题:zjnu 1516BFS,把终点都加入队列,第一次走到的人的位置一定是对于这个人来说最近的躲雨点,就ans[step]++代码:#include&lt;iostream&gt;#include&lt;string&gt;#include&lt;stdio.h&gt;#include&lt;queue&gt;using namespace std;str原创 2018-03-29 21:58:36 · 1061 阅读 · 0 评论 -
拓扑排序
偏序与全序这个应该是离散数学的内容,这里用口语来描述一下偏序:两点之间不存在环路,不要求连通与否。例子:合成需要药水A,药水B,这是两条连通的路,不存在环路,但是没有规定药水A和药水B的关系。全序:就是在偏序的基础之上,有向无环图中的任意一对顶点还需要有明确的关系比如药水A需要在药水B之前使用,就使这3个物品两两相连了。拓扑排序在图论中,由一个 有向无环图(DAG...原创 2018-04-03 20:54:50 · 290 阅读 · 0 评论 -
最小密度路径
原题:zjnu 1323题意:在最短路的基础上加上了路的段数的要求,所以我们加上一维h,用dis[i][j][h]表示i到j走h条路时的最短路,ans枚举1~n即可因为n比较小而q比较大,所以用floyd一次性算出来比较省事代码:#include&lt;stdio.h&gt;#include&lt;string.h&gt;#define N 59#include&lt...原创 2018-04-08 15:26:55 · 728 阅读 · 0 评论 -
虫食算
原题:zjnu 1206题意:有一个n进制n位数的加法表达式,用相同的字母表示相同的数字,求所有字母所表示的数字解析:总共可能性有26!,主要难点就在任何剪枝根据加方运算的性质,从最后一列往前dfs,可能有以下几种情况确定了3位,加上dfs传进的进位,就可以判断是否成立了确定了2位,我们就可以定下一位,如果和之前定下的有冲突则不成立确定了1位或0位,则枚举一位,再重新...原创 2018-04-09 12:40:25 · 323 阅读 · 0 评论 -
一棵树的子树数量
原题:Who killed Cock Robin 题意:给出一颗无根树,问有多少种子图(包括点)解析:既然无根树,那么就随便选择一个点为rt,就1好了用x[i]表示以i点为父亲得到的图的可能性 对于每个点i,儿子数为0时,x[i]为0,有n个儿子时,对于每个儿子j所能产生的可能性为x[j]+1,而x[i]为随便选任意个儿子相乘之和eg:有三个儿子可能性为2 3 4,可能得...原创 2018-04-22 17:10:59 · 2120 阅读 · 0 评论 -
合约数 (树形前缀和)
原题:埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 B题意:给出n个点的价值,根为q,已经n-1条边,求下面这个数据的和%(1e9+7)以i为根的子树中,val[i]的合约数的个数*i合约数:合数且是约数解析:不能每个点分开算一遍,所以要想一个办法在一次遍历中解决所有问题题目求的是一个结点为根的子树中所有合约数的个数,那么我们可以仿照前缀和的做法首...原创 2018-04-30 10:16:49 · 557 阅读 · 0 评论 -
codeJan和树 (子树与其子树的差 单调栈)
原题:Wannafly挑战赛14 D题意:n个点的树,root为1,每条边有权定义一个结点的val==此结点为根的子树中所有其他结点到此结点的距离和定义两个结点(一个是另一个的祖宗)的sub==val差求sub在小于等于m范围内的最大值解析:今日做过类似的题,可以参考一下思路首先要在N时间内预处理所有点的val:对于点1,有儿子2和3,val[2]和...原创 2018-05-03 19:31:18 · 338 阅读 · 0 评论 -
Safe Path (图论 多个M外延)
原题:Gym - 101755H题意:S出发到F的距离,其中有多个M,每个M可以走k步,如果有个点是M走的到的,那么你不能走这个点解析:对每个M往外延k步,延到的地方变成M,但是因为数据比较大,不能一个一个延,要把所有M一次性加到queue里面一次性延合理性证明:因为是bfs所以点i延v步时,如果延到了其他点的路径,那么对于这个交触点来说,一定是前面的点还能走的远(bfs:i之...原创 2018-07-22 19:42:37 · 530 阅读 · 0 评论 -
Treasure Island(简单图论题)
原题:Gym-100971A 题意:n*m图,‘.’代表陆地,‘#’代表海,‘?’未知,问你是否有确定的一片大陆(没有其他点)解析:开始的时候没看到条件(一定有一个‘.’)多写了一大堆判断条件既然一定有一个点,那么我们就先找到这个点,把?看成陆地走一遍,然后,这遍假设没走到一个‘.’,那么就是不可能了,对于‘?’,如果没走过的就是#了,走过的判一下去掉这个点后是不是对陆地有影...原创 2018-07-31 13:28:06 · 831 阅读 · 0 评论