
图论
nymph181
这个作者很懒,什么都没留下…
展开
-
【染色 最短路】luogu_2124 奶牛美容
题意给出3个块,求出把它们连起来至少还要用多少个格。思路把每个块合并后,求出每个块到每个格的最短路以及块之间的最短路。并以块之间直接相连(可能有点重复)的最小代价为初始答案,枚举块之间的中间点进行答案更新。代码#include <cstdio>#include <cstring>#include <algorithm>const int dx[...原创 2020-01-15 21:43:23 · 283 阅读 · 0 评论 -
【树的直径】战略威慑
树的直径原创 2019-11-13 19:18:14 · 253 阅读 · 0 评论 -
【最短路】赛艇表演
最短路原创 2019-11-13 19:08:46 · 225 阅读 · 0 评论 -
【JZOJ比赛】2019.11.9 JZOJ B组
练习赛原创 2019-11-09 16:52:55 · 196 阅读 · 0 评论 -
【JZOJ比赛】2019.11.8 JZOJ B组
练习赛原创 2019-11-08 21:53:39 · 226 阅读 · 0 评论 -
【基环树】洛谷_5022 旅行
题意给出一张图,选择任意一个点为起点,每次遍历只能走没经过的点,求出一个遍历顺序使得它字典序最小。思路首先选111为起点。这张图有树和基环树两种情况。树的情况下,直接贪心每次遍历编号小的点就好了。基环树的情况,因为图中有环,所以会影响答案,不能使用贪心去做。因为题目数据很小,所以我们可以暴力删除基环树上的边,使得这个基环树变成一棵树,然后再用贪心更新答案。代码#include<...原创 2019-03-01 20:35:19 · 364 阅读 · 0 评论 -
【动态规划 最大匹配】JZOJ_5354 导弹拦截
题意每个导弹拦截系统拦截了一个导弹后,下一次只能拦截比这个导弹坐标要大的导弹。给出每个导弹的坐标(x,y,z)(x,y,z)(x,y,z),求出一套导弹拦截系统最多能拦截的导弹,以及需要多少套系统可以拦截完所有导弹。注意:导弹是同时飞来的。思路因为导弹是同时飞来的,所以我们可以按照一个坐标排序,进行动态规划。如果拦截导弹iii后能拦截导弹jjj,那么我们给它们连一条边,之后就形成了一个二分...原创 2018-12-30 16:44:11 · 200 阅读 · 0 评论 -
【最短路 SPFA】JZOJ_3086 洛谷_3831 [SHOI2012]回家的路
题意给出一个N∗NN*NN∗N的方格图,这里有NNN横NNN纵条线路,其中有MMM个中转站。坐车每做一站需要222分钟,中途转车需要111分钟,求出从起点到终点的最短时间。如果不能从站内转车到终点,输出−1-1−1。思路考试时看到这题以为是动态规划,然后发现好像不准确,就让它做了222遍,发现样例都能过,然后拿到了303030分。正解是最短路。把每个点拆成横点和纵点,它们之间连一条边,...原创 2019-01-23 21:42:38 · 202 阅读 · 0 评论 -
【数学 图论】JZOJ_3085 图的计数
题意询问有多少个NNN个点,MMM条边的有向图,从111号点到达NNN号点需要经过至少N−1N-1N−1条边。该有向图中可以包含重边和自环。方案数%1000000009\%1000000009%1000000009。思路因为至少是N−1N-1N−1条边,所以这构成了一条链,我们要在这链里加边且不是捷径边。一共可以加入N2N^2N2条边,捷径边的边数有CN−12C_{N-1}^{2}CN−1...原创 2019-01-24 19:56:12 · 344 阅读 · 0 评论 -
【二分答案 最大匹配】JZOJ_1610(初中)【东莞市选2008】导弹
题意给出一张完全图,其中AAA控制着一些城市,BBB也控制着一些城市,它们两之间不重复。一个城市只有一个导弹可以去摧毁城市,求出AAA要摧毁BBB所有城市至少需要的时间是多少。思路显然答案为AAA的一些城市到BBB中最长的路最短。那么根据这个性质,我们可以二分一下时间,使得当前图中所有边都小于它,然后利用最大匹配判断是否能匹配完BBB。代码#include<cstdio>...原创 2019-01-24 21:40:25 · 285 阅读 · 1 评论 -
【最小生成树】JZOJ_5353 村通网
题意有NNN个村,它们需要联网,联网的方式有两种:1、直接联网,花费AAA元2、与另一个村连起来,花费B∗B*B∗它们之间的曼哈顿距离,如果另一个村有网,那么这个村也会有网。求最小花费。思路直接做最小生成树,特别要注意的是,如果两村连起来的花费超过AAA元我们就不连,因为直接联网会比这样更优,最后给每个联通块加上AAA,表示每个块都有一个村有网共享给它们。代码#include<...原创 2018-12-30 16:29:14 · 231 阅读 · 0 评论 -
【树的直径】洛谷_3629 [APIO2010]巡逻
题意有一颗树,要在其中加入K(k≤2)K(k\leq 2)K(k≤2)条边,使得本来遍历这颗树要经过的边数最少,同时加入的边一定要正好走过111次。思路当K=1K=1K=1时,显然是在树的直径的两个点之间连一条边,因为这样可以少走一次直径,而直径又是最长的。当K=2K=2K=2时,新建的边如果与之前的边没有环重叠的话也是和K=1K=1K=1的方法一样。如果有重叠的话,那么要正好走过一次新建...原创 2018-12-15 07:40:18 · 329 阅读 · 0 评论 -
【最小生成树】CH_6201 走廊泼水节
题意给出一颗NNN个点的树,要求加入若干边,使得这棵树变成完全图,且图中的最小生成树还是这颗树。求边权总和最小是多少。思路类似kruskalkruskalkruskal算法的过程,对于一条边,如果它们的两个点属于两个不同的集合,那么这些集合间都要连边,为保证最小生成树还是数据给出的树,我们就让它们都连上v+1v+1v+1。代码#include<cstdio>#include...原创 2018-12-14 19:16:48 · 282 阅读 · 0 评论 -
【矩阵乘法 floyd】洛谷_2886 牛继电器Cow Relays
题意一张TTT条边的图,点的编号在1∼10001\sim10001∼1000之间。求出从起点SSS到终点EEE刚好经过NNN条边的最短路。思路因为边最多只有100100100条,而点编号在1∼10001\sim10001∼1000内,所以点数最多只有200200200个,然后我们可以先离散化。离散化数据把它映射到1∼P1\sim P1∼P的编号中。设AAA为这个图的邻接矩阵,我们可以看看这...原创 2018-12-07 21:15:36 · 377 阅读 · 0 评论 -
【最短路】洛谷_1073 最优贸易
题意给出一个图,求出从点111到点NNN的一条路径中选两个点(p,q)(p,q)(p,q)使得q−pq-pq−p最大,其中要先经过ppp再到qqq。思路我们利用dijkstradijkstradijkstra的最短路方法,求出ddd和fff,其中did_idi代表从点111到点iii的路径中点权最小的...原创 2018-12-01 07:50:08 · 278 阅读 · 0 评论 -
【最短路 动态规划】洛谷_1948 电话线Telephone Lines
题意给出一个图,求出其中一条从点111到点NNN的路径,在上面选掉KKK条边,使得剩下的边中最大的最小。思路这个题其实是求出一条111到NNN的路径中使得第K+1K+1K+1的边最小。解法一:首先看到字样“最大的最小”,我们可以感觉这个题可以用二分,然后细读一下发现答案满足单调性。当我们二分出一个midmidmid,可以求出这个图中从111到NNN的路径中大于midmidmid的边的个...原创 2018-11-30 20:04:25 · 378 阅读 · 0 评论 -
【并查集】洛谷_2700 逐个击破(平津战役)
题意给出NNN个点,它们之间有N−1N-1N−1条路径相连,其中KKK个特殊点,我们要删去一些边使得这KKK个点不连通,求最少的删除代价。思路可以想到构图。我们删边的最小代价等于用总代价减去构图的最大代价,于是我们可以把边从大到小排序来放入并查集里。当加入一条边时,判断两个点是不是特殊点,还有特殊点的集合里的点都要标记成特殊点,代表特殊点连到这个集合的某一个点都会与另一个特殊点连通,就不符题...原创 2018-10-19 22:14:25 · 266 阅读 · 0 评论 -
【最小生成树 并查集】JZOJ_2940 生成输入数据
题意给出一棵树,在里面加上若干边使它变成一个完全图,且图中的最小生成树还是这棵树,求图最小的边权总和。思路见走廊泼水节。代码#include<cstdio>#include<cstring>#include<algorithm>struct node{ int x, y, w;}e[40001];int t, n, tot, maxs;...原创 2019-01-19 21:15:10 · 282 阅读 · 0 评论 -
【tarjan 割点】JZOJ_3896 战争游戏
题意给出一个图,求出删去每个点会使多少个有序点对(x,y)(x,y)(x,y)不连通。思路分成两个情况。当删去的点不是割点,答案就为n−1n-1n−1。如果删去的点是割点,就让它的子树两两相乘相加。用tarjantarjantarjan求出割点,我们先算出无序点对的答案再/2/2/2。代码#include&amp;lt;cstdio&amp;gt;#include&amp;lt;algorithm&amp;gt...原创 2019-01-26 21:22:06 · 256 阅读 · 0 评论 -
【数学 图论】JZOJ_4226 A
题意给出NNN个点MMM条边的图,要求每个点的度数不小于kkk,求出最少还要连的边,不能有自环。思路我们求出除最大值外所有点还需的度数总和sumsumsum,以及一个点最大需要的度数maxsmaxsmaxs,分两种情况讨论:1、maxs&gt;summaxs&gt;summaxs>sum,答案为maxsmaxsmaxs。因为这样我们可以让这个点和其他点连边,如果还需要...原创 2019-01-28 20:42:42 · 208 阅读 · 0 评论 -
【欧拉回路】JZOJ_3682 CF492E Points and Segments
欧拉回路原创 2019-08-24 15:51:05 · 314 阅读 · 0 评论 -
【动态规划 树】JZOJ_3738 理想城市
题意在一个方格图上有若干个小格,其中满足小格互相连通,且不是空格也互相连通。求小格两两之间的最短路的总和。思路暴力303030分很好打,但是后面枚举小格一定是O(n2)O(n^2)O(n2)的,所以我们考虑别的做法。根据图的性质,我们可以把横着连通小格缩成一个点,将相邻的小格的点连边。可以发现,一条连接(u,v)(u,v)(u,v)的边对答案的贡献为size[v]∗(n−size[v])...原创 2019-08-11 08:49:14 · 191 阅读 · 0 评论 -
【图论 最小生成树】JZOJ_3410 Tree
有个小坑原创 2019-08-23 21:46:37 · 244 阅读 · 0 评论 -
【最短路】JZOJ_6286 走格子
题意给出一个方格图,里面有若干墙,求起点走到终点的最小代价。有333个操作:1、移向相邻的格子(上左下右)耗费1代价。2、向上下左右一个方向发射传送门,传送门将会在这个方向碰到的第一个墙生成。最多存在2个传送门,第3个传送门发射时第1个传送门会消失。耗费0代价。3、走向传送门,到达另一个传送门前面的格子。耗费1代价。思路转化一下问题。第一种就是向四周建权值为1的边。需要传送时当四...原创 2019-08-09 20:36:25 · 319 阅读 · 0 评论 -
【凸壳 分层图 最短路】JZOJ_3238 BZOJ_3482 [COCI2013]hiperprostor
这里讲一下做法思路先分层图跑出f[i]代表经过i条x边的最短路那么代价为f[i]+ix把y=f[i]+ix扔到坐标系,可以发现当x不同时,到最短路经过的x边数也不同,由于是最短路,所以我们在坐标系中对每个x取y最小的情况,发现是个上凸壳,单调栈维护一下,对凸壳中两个交点,答案贡献为f[i]+ix(x从一个点到另一个点),用等差数列干。以上第二问f[所有]=inf(不连通) 0 0...原创 2019-07-12 11:33:53 · 265 阅读 · 0 评论 -
【最小生成树】JZOJ_3237 间谍派遣
题意将一个图分成若干集合,总代价为使用的边权和每个集合中的最小点权。最小化代价。思路新建一个点,将所有点连向它,边权为这个点的点权。之后就是最小生成树了。代码#include<cstdio>#include<algorithm>struct node { int u, v, w;}edge[500501];int n, tot;int fa[1001...原创 2019-07-12 07:12:53 · 184 阅读 · 0 评论 -
【最大流 最小割】JZOJ_3348 秘密任务
题意在一张图上,去掉最短路径上的一些边,使得最短路不连通,判断方案是否唯一以及求出最小去掉边的边权总和。思路首先把最短路径上的点取出来。去掉边不连通显然是求最小割,之后再判断最小割是否唯一。在残量网络中,边(u,v)(u,v)(u,v),u∈Su\in Su∈S,v∈Tv\in Tv∈T,那么这条边是必割边。判断一下必割边的容量总和与最小割。代码#include<queue&...原创 2019-07-11 20:36:40 · 266 阅读 · 0 评论 -
【分层图 最短路】luogu_4568 [JLOI2011]飞行路线
题意一张图,其中有kkk次免去一条边权机会,求最短路。思路分层图,将图分成k+1k+1k+1层,第iii层代表用了kkk次机会,每层间用边权为000的边连接,跑一边最短路。(建边建错调了好久??!)代码#include<queue>#include<cstdio>#include<cstring>#include<algorithm>...原创 2019-07-11 20:20:33 · 132 阅读 · 0 评论 -
【最短路】SSL_1319 埃雷萨拉斯寻宝
题意给出一个矩阵,求出从第一行走到最后一行的最少花费。其中每种格子第一次走到都要花费相应的代价,同种格子之间可以直接传送到达。思路按照题意的要求建边,然后建立一个超级源点连到第一行,超级汇点连到最后一行,跑最短路就可以求出答案了。代码#include<queue>#include<cstdio>#include<cstring>int n, p...原创 2019-04-27 14:11:29 · 388 阅读 · 0 评论 -
【LCA】JZOJ_3054 祖孙询问
题意给出一棵树,询问两个节点的关系。思路LCALCALCA模板。代码#include<cstdio>#include<cstring>#include<algorithm>const int t = 16;int n, m, root, tot;int f[40001][17], dfn[40001];int head[40001], n...原创 2019-03-09 16:36:04 · 184 阅读 · 0 评论 -
【最短路】SSL_1297 GF打Dota
题意给出一张图,求出从点111到点nnn的次短路径。思路分别以起点和终点跑一次最短路,然后枚举一条边来绕长最短路变成次短路,更新答案。代码#include<queue>#include<cstdio>#include<cstring>#include<algorithm>int n, m, tot = -1, p, ans;in...原创 2019-03-02 16:45:57 · 144 阅读 · 0 评论 -
【最短路 搜索】JZOJ_4246 san
题意有一个图,其中如果两个点之间的最短路是奇数,我们就称它为不和谐最短路,求出每个点经过了几条不和谐最短路。思路一开始想到用dijkstradijkstradijkstra跑最短路然后记录前驱递归回去,结果看了别人的讨论发现想法错了。最短路的长度虽然相同,但它可能经过不同的点,所以这种方法是错误的。跑SPFASPFASPFA求多源最短路(dijkstradijkstradijkstra常数...原创 2019-01-29 20:42:12 · 187 阅读 · 0 评论 -
【最短路】洛谷_4779 单源最短路径(标准版)
题意给定一个NNN个点MMM条边的有向图,起点是SSS,求出起点到每个点的最短路思路堆优化过后的dijkstradijkstradijkstra算法。代码#include<queue>#include<cstdio>#include<cstring>using namespace std;priority_queue<...原创 2018-09-17 12:12:41 · 453 阅读 · 0 评论 -
【最短路 枚举】SSL_1141 最短路
题意给定一个NNN个点MMM条边的有向图,有KKK个标记点,要求从规定的起点按任意顺序经过所有标记点到达规定的终点,问最短的距离是多少。思路求出起点和每个标记点作为起点的单源最短路,然后枚举一下经过标记点的顺序记录答案。代码这里写代码片...原创 2018-09-11 20:42:43 · 214 阅读 · 0 评论 -
洛谷_1551 亲戚
题目题意: 给出n个人的亲戚关系,之后给出p对人,判断这两个人之间有没有亲属关系。思路: 因为这是并查集的例题,所以这里用并查集,每次读入都让它们合并起来,可以压缩路径。代码:#include<cstdio>int n,m,p,x,y,father[50001];int find(int a){ if (father[a]!=a) father[a]=find...原创 2018-02-04 09:17:30 · 778 阅读 · 0 评论 -
洛谷_2024 食物链
题目题意: 给出n只动物和k句话,判断这k句话里有几句假话。思路: 题目中告诉了我们假话的几种情况:• 当前的话与前面的某些真的话冲突,就是假话• 当前的话中 X 或 Y 比 N 大,就是假话• 当前的话表示 X 吃 X,就是假话我们可以用x表示同类,x+n表示猎物,x+2n表示天敌,然后我们在读入的时候判断后两种情况,第一种另外判断。代码:#include<cstdio>...原创 2018-02-04 18:16:12 · 328 阅读 · 0 评论 -
poj_1611 The Suspects
题意有n个学生,m个组,每个组有k个学生,一开始学生0感染了病毒,如果一个组里有一个学生感染了病毒那么这个组里的人都会被传染上病毒,有多组数据,n和m为0时表示输入结束。思路这道题是一个比较简单的并查集题目,我们每次读入一个组学生的编号时,就把2~k学生的编号和编号1学生的编号连在一起,表示他们是同一个组的,我们在操作“集”的时候要判断一下,如果这两个要连起来的学生不是同一个组的,...原创 2018-03-23 19:21:43 · 160 阅读 · 0 评论 -
SSL_1764 最小生成树
题意给出点数为n的一个图,求里面的最小生成树。思路这里我用的是并查集的方法,先给边的权值排序,从最短的边开始选,如果连接这条边的两个点不在同一个集合里面我们就把它们放进去,答案加上这条边的权值就可以了。代码#include<cstdio>#include<algorithm>using namespace std;int n,ans,m,fat...原创 2018-03-22 16:52:02 · 150 阅读 · 0 评论 -
SSL_2344 刻录光盘
题目: 在PJOI2010夏令营快要结束的时候,很多营员提出来要把整个夏令营期间的资料刻录成一张光盘给大家,以便大家回去后继续学习。组委会觉得这个主意不错!可是组委会一时没有足够的空光盘,没法保证每个人都能拿到刻录上资料的光盘,又来不及去买了,怎么办呢? 组委会把这个难题交给了DYJ,DYJ分析了一下所有营员的地域关系,发现有些营员是一个城市的,其实他们只需要一张就可以了,因为一个人呢拿到光...原创 2018-03-17 07:17:51 · 310 阅读 · 0 评论 -
SSL_1500 最短路上的统计
题意: 给出一个图,每条边的权值都是1,求点a到点b间最短路上点的总数。思路: 我们先用floyd求出a到b的最短路,然后枚举中间点i,看f[a][i]+f[i][b]是否=f[a][b],如果等于,那i就是这个最短路上的点。代码:#include<cstdio>#include<cstring>int n,m,a,b,f[101][101];int mi...原创 2018-03-16 21:26:10 · 197 阅读 · 0 评论