
图论
图论
_hunxuewangzi
这个作者很懒,什么都没留下…
展开
-
HDU 6832 A Very Easy Graph Problem题解(最小生成树+思维)
题目链接题目思路给你一个n个点,m条无向边的图,每个点有是黑点或者白点,要你求所有黑点和所有白点的最短路的和。题目思路跑多次最短路显然会TLE,这个时候要注意他每条边的长度是2i2^i2i也就是说你跑了全部的前i条边的长度之和都比你跑第(i+1)条边的长度短,所以如果两个点能通过前i条边到达,那肯定比通过第i+1条更优,所以我们从1 到 m按顺序建最小生成树。对于白点和黑点的最短路,我们枚举每条边会被多少种白点和黑点通过,统计两侧的黑白点个数,计算贡献即可。代码#include<set&g原创 2020-08-07 21:59:16 · 257 阅读 · 0 评论 -
Codeforces Round #656 (Div. 3) E. Directing Edges 题解(拓扑找环)
题目链接题目大意给你一个图有n个点和m条边,其中m条边有的是有向边,有的是无向边,看你是否能把所有无向边变为有向边,然后使这个图无环,如果没环,那么输出YES,并且输出所有边的方向,否则输出NO题目思路自己想到拓扑排序那方面了,但是还是没写出来,看大佬的博客说是套路题qwq首先有向边是不能修改的,直接把有向边连起来,拓扑找环看是否能够构成环,如果能直接输出NO,否则就是YES,为什么是YES呢,因为你可以把所有点都弄一下拓扑序(不知道是不是这么叫),然后你把无向边按拓扑序小的连拓扑序大的就行了,而原创 2020-07-18 10:55:11 · 482 阅读 · 0 评论 -
Intel Code Challenge Elimination Round (Div. 1 + Div. 2, combined) C. Destroying Array题解(逆向思维+并查集)
题目链接题目大意有一个长为n的a数组,以及一个长为n的全排列p,每次操作消去a[p[i]],求消去这个后,分块序列(要连续)的最大值。题目思路这个题太神奇了,根本想不到是并查集,肯定不可以暴力,这个题目要用逆向思维,从后面开始,把删除当作加一个值。每次补充一个数都判断其与前后数字是否连接,是的话用并查集连接起来,更新当前最大值。代码#include<set>#include<map>#include<stack>#include<cmath>原创 2020-07-17 17:25:37 · 170 阅读 · 0 评论 -
Codeforces Round #582 (Div. 3) G. Path Queries 题解(种类并查集+kruskal的思想)
题目链接题目大意给你一棵树,求有多少条简单路径(u,v),满足u到v这条路径上的最大值不超过k。q次查询。(u<v)题目思路我还以为是换根dp啥的,没想到居然是类似于kruskal的思想来解题。将所有边按权值从小到大排序,查询值qi也从小到大排序。对于每次查询的值qi,将边权小于等于qi的边通过并查集合并在一起。对于合并后的联通块,每个联通块对答案的贡献为size×(size−1)2,所有联通块的贡献直接求和即可。所以每次合并两个节点时,先将这两个节点所在的联通块的贡献减去,再加上合并后的贡原创 2020-07-16 15:22:02 · 177 阅读 · 0 评论 -
2020牛客暑期多校训练营(第二场)Cover the Tree 题解(dfs序)
题目链接题目大意给一棵树,要求选择最少的点对,所有点对连成的链要覆盖所有的边。边可以重复覆盖,求最少的点对,以及写出点对题目思路首先你从以一个度不为1的点作为根节点。然后你每次都连接一个叶子节点,这样显然是所有的边都可以被覆盖。即答案为度为1的点的个数,但是这样显然很大,可以优化,可以相当于把根节点当作中间节点,让叶子节点两两相连,显然答案已经出来了,就是叶子+12\frac{叶子+1}{2}2叶子+1但是怎么两两配对是一个问题,我比赛的时候差不多已经想到了dfs序,但是还是没写出来,下面就直接原创 2020-07-13 21:35:06 · 369 阅读 · 0 评论 -
Codeforces Round #634 (Div. 3) F. Robots on a Grid题解(拓扑找环+逆向dfs/倍增)
转载链接:https://blog.youkuaiyun.com/qq_45458915/article/details/105515708?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.none转载 2020-06-09 16:38:24 · 231 阅读 · 0 评论 -
HDU Legal or Not 有向图拓扑找环模板题
题目链接题目大意判断有向图是否有环题目思路把所有入度为0的节点删去。然后删除这个节点的所有的边。即所有和它相连的点的入度减一。然后循环。就是放在队列里,看最后是否还有入度不为0的点就行了。代码#include<queue>#include<cstdio>#include<cstring>using namespace std;const int maxn=1e2+5;int n,m,deg[maxn],head[maxn],cnt;struct n原创 2020-06-09 14:32:53 · 253 阅读 · 0 评论 -
Codeforces Beta Round #33 (Codeforces format) B. String Problem 题解(floyd)
题目链接题目大意给出两个字符串,给出n个 a b x,表明字符a可以变成b,每次花费为x。问要想把这俩字符串变成一样的,最少花费多少。无法变就输出-1。题目思路很显然是预处理一下就行了,但是最开始我以为只能a->b,其实可以a->b->c,所以我就wa了,然后你可以等价于一个图,然后跑一遍floyd就行了,注意floyd的k在最外层循环代码#include<cstdio>#include<map>#include<math.h>#i原创 2020-05-19 21:57:10 · 196 阅读 · 0 评论 -
集训队选拔赛 黄金矿工 题解(二分+dij)
题目链接题目思路比赛时候就觉得是二分,但是不知道怎么二分,现在想想好傻,其实要求什么就二分什么,然后dij加个限制条件就行了。这种题目十有八九都是二分。代码#include<queue>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;t...原创 2020-04-25 21:04:43 · 208 阅读 · 0 评论 -
周赛 还没想好题目的题 题解(最短路)
题目链接题目大意求 1->2,2->3…n-1->n的最短路之和题目思路显然这题没什么优化的方法,先只能一次一次求,但是其实后面仔细想想只需要n/2次最短路即可。因为你跑 2 的时候 可以把 1->2 和2->3的都算出来。就当复习一下dij代码#include<cstdio>#include<queue>#include<...原创 2020-04-16 21:44:49 · 136 阅读 · 0 评论 -
牛客小白月赛22 B 树上子链 题解【模板树的直径负边】(树形dp)
题目链接题目思路显然就是求树的直径,但是有负边。那么两次dfs或bfs显然就不行了。此时就要用树形dp。首先把无根树转化成有根树,然后设置dp方程,dp【i】为以i为根节点的包括i在内的最长链的长度。dp【u】=max( dp【u】,dp【v】+a【u】)我们还要保存次长链的长度。那么最终的答案就是,枚举所有节点,把这个节点作为根,最长链加上次长链的长度减去a【u】就是最终的答案.。其实就...原创 2020-04-07 14:47:35 · 217 阅读 · 0 评论 -
学军信友队趣味网络邀请赛 b题 齐心抗疫(树的直径)
题目描述对于所有数据,满足2<=n<=50000,1<=a[i]<=1000。题目思路前言本来我以为是最短路什么的。。。结果是我太菜,个人认为此题还是补充了自己知识,学到了不少知识树的直径表示最长的那段路径,显然可以任意点进行dfs求这一点到任意一点的最长距离,则那个点为直径的一个端点,然后在端点dfs找出最长距离,另一个点就是直径的另外一个端点。正文其...原创 2020-04-05 22:48:28 · 1501 阅读 · 0 评论 -
牛客小白月赛18 H Forsaken喜欢独一无二的树 题解(最小生成树)
题目链接题目大意给出一个n个点m条边的图,每个边有权值w,你可以删除一些边,使得剩下的边的最小生成树大小不变并且这个图的最小生成树是独一无二的。现在我们想要知道删除的边的权值和最小是多少?题目思路要形成独一无二的最小生成树,那么就没有别的边可以在构造最小生成树时加入最小生成树。我们可以在计算最小生成树时求所有可以加入最小生成树的边权和,再减去一个最小生成树的边权和就是答案。其实真的不难理...原创 2020-04-02 11:16:43 · 340 阅读 · 0 评论 -
周赛 厂里吃鸡王 题解(多起点bfs)
题目链接题目大意有n个城市,m条路也就是双向边(边可能重复和自环),每个城市都会生产1种装备(不同城市之间的装备可能相同)共有k种不同的装备每种装备都需要小姐姐送过来。求每一个城市获得k种装备的最短路题目思路装备最多100种,可以计算每种装备到每个城镇的最短路。直接将所有生产i型商品的城市一次性全加入队列。然后bfs最多100次bfs即可。满足题目要求易错警示1:双向边一定要记得开...原创 2020-03-25 16:34:52 · 247 阅读 · 0 评论 -
洛谷 P5018 对称二叉树 题解
题目链接此题的题解就是暴力题解,没有什么技巧性。但需要关注的点就是如何判断此节点所对应的二叉树是否满足对称,其实随便一个点是否满足肯定要不停的找子节点,那么就要想到dfs的思想!首先先用一个函数找出所有点的子节点有几个然后再用check函数判断每一个节点为根的树是否满足对称二叉数的条件最关键的是check函数判断是递归的判断——长知识代码 c or cpp#include<b...原创 2020-02-16 17:55:03 · 272 阅读 · 0 评论 -
二叉数
二叉树的遍历二叉数的遍历分为前序遍历,中序遍历,后序遍历。其命名的方式就是根据根的节点顺序来命名先序:根左右 / 中序:左根右 / 后序:左右根其实现方法其实就是类似于bfs,一直搜索,例如中序,一直往左节点搜,搜到不能搜的时候就输出此点然后往右节点搜中序的伪代码search(){search(左);printf(自己);search(右);}中序前序后序的伪代...原创 2020-02-16 11:33:14 · 161 阅读 · 0 评论 -
打包商品 题解(并查集)
题目链接题目思路其实看到合并就要想到并查集,但是自己还是不知道怎么写,其实也相当于是一个裸题,把sm数组和bi数组初始化为自己的值。然后再更新是一样的操作,还有更新最大值和最小值的情况只要更新祖宗节点就可以,不要全部跟新,要不然就出锅(我就wawawa了还有题目有一个找最小编号的操作,其实完全没有必要用一个数组,直接联合的时候让自己父亲节点的值小就好。还有合并的时候一定注意是祖宗节点合并...原创 2020-03-09 20:05:09 · 226 阅读 · 0 评论 -
洛谷 P2024 [NOI2001]食物链 题解(种类并查集)
题目链接并查集是维护“属于同一组”的数据结构,但是在本题中,并不是只有属于同一类的的信息还有捕食关系的存在,那么显然普通的并查集肯定不行。可以把并查集扩大,变为种类并查集!用三倍的并查积的存各种动物的关系,一倍存本身,二倍存猎物,三倍存天敌。易错:注意每一次操作的合并要写三个合并代码 c or cpp#include<bits/stdc++.h>int n,k,i,f[...原创 2020-02-17 16:07:20 · 184 阅读 · 0 评论 -
并查集模板
重点介绍如何压缩路径压缩路径要在每次找祖宗函数中进行压缩洛谷 P3367 【模板】并查集 题目链接 https://www.luogu.com.cn/problem/P3367使用递归函数让这条路径所经历的每一个点的父亲数组变为祖宗!#include<cstdio>using namespace std;int n,m,i,z,x,y,dad[10010];int fin...原创 2020-02-15 17:30:03 · 114 阅读 · 0 评论 -
洛谷 P4017 最大食物链计数 题解(拓扑排序+记忆化搜索)
占坑原创 2020-03-16 16:45:04 · 319 阅读 · 0 评论 -
洛谷 P4180 [BJWC2010]严格次小生成树 题解(次最小生成树模板)
先占坑原创 2020-03-06 10:57:34 · 179 阅读 · 0 评论 -
UVA1494 Qin Shi Huang's National Road System 题解(次最小生成树)
题目链接题目大意给定n个点的点权及相互间的边权,求一棵树,其中一条边的边权变为0,树的比率值为该0值边所连的两点的点权和/剩下的树边和。求这个值最大是多少。题目思路这题要用到次小生成树的思想,即找到最小生成树,然后添加一条边构成环,再删掉环中属于最小树的最大边,用这种方法遍历所有边以找到最终长度。易错警示1:注意初始化的时候要仔细2:注意边长double类型3:求i到j的所有路...原创 2020-03-04 17:54:28 · 176 阅读 · 0 评论 -
SP11579 COMPANYS - Two Famous Companies 题解(最小生成树+二分)
题目链接引用链接题目大意给出一个图,图中有n个点,m条边,图中每条边非黑即白。要求:求这张图的最小生成树,且满足刚好有k条白边。题目思路我最开始是这么想的:不是要满足白边条数吗?我先把白边给连到目标个数 k ,之后再连黑边。我用的 kruskal算法,我想sort 之后一定满足连的白边最短,黑边最短,加起来肯定就是最优解。然后我被狠狠地打脸了,为什么这样不行?我们来看看这张图。如...原创 2020-03-04 11:13:24 · 330 阅读 · 0 评论