![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
图论
文章平均质量分 66
图论
whoammiiiiii
这个作者很懒,什么都没留下…
展开
-
LightOJ 1123 在线最小生成树
传送门题意:给你n个点,m条无向带权边,现在按序加边,现在问你每加一条边后最小生成树的边权和更新为多少,如果没有最小生成树输出-1,有的话就输出mst的边权和。1<=n<=200,1<=m<=6000思路:最暴力的思路就是每次加m次边并且每次当加了i条边后,就跑i条边的最小生成树,这样的时间复杂度是O(m*m*log(m)),显然是不可取的(但我还是抱着侥幸心理冲了一发果然t力)。所以就要想办法优化。我们可以发现每次加边后跑mst时,有很多边都是之前就能确定用不上的边,但原创 2021-01-20 02:19:32 · 309 阅读 · 0 评论 -
cf 1076D 堆优化dij性质
题意:给你一个n个点m条边的无向图,定义如果1号点到 i 号点的距离是原图的最短距离就是好点,现在让你最后最多只能剩k条边,同时让好点的个数最多,问你剩的是哪k条边,输出边个数和剩下的边的编号。思路:首先明确如果剩k条边,同时要好点最多,那么就有min(k+1,n)这么多个好点(包括点1),因为一条边就可以制造一个好点,所以接下来就利用堆优化dij的性质,在队首的那个点一定已经是最短路了,无法被松弛,所以只要dij里面松弛的时候记录一下之前的那条边的编号,直到pop了min(k+1,n)个点就brea原创 2020-12-29 14:45:04 · 152 阅读 · 0 评论 -
2017ccpc 秦皇岛 H - Prime Set
题目链接题意:有 n 个数 ai,如果 ai + aj 是一个质数的 (i != j),那么 (i, j) 是一个 pair。现在你可以选择最多 k 个 pair,问最多pair的并集最多有多少个数。n ≤ 3000, k ≤n*(n−1)/2, ai ≤1e6。正解:先不考虑 1 + 1 = 2 的情况,那么将奇数放在左边,偶数放在右边,跑二分图求出最大匹配,一开始两个两个消除。然后考虑把 1 加入的情况,那么 1 要不然自我消化,要不然和放在左边和一个偶数结合,那么把 1 一个一个加入并实时更新原创 2020-10-08 19:06:20 · 211 阅读 · 0 评论 -
hdu 1811 Rank of Tetris(拓扑排序+并查集+各种情况考虑)
题目链接我的思路是先把边集存起来,如果有等号关系的那两个点就用并查集缩一下点,然后在对>和<关系的进行处理,就是在他们的父亲节点之间加边就行,比如a>b就加一条fa[a]到fa[b]的边,a<b就加一条fa[b]到fa[a]的边。因为conflict和uncertain同时存在的情况是输出conflict,所以我们先来看conflict的情况,首先第一步把等号关系的两个点用并查集缩点,然后处理大于号小于号关系的时候,先判断他们的父节点是不是同一个,如果是同一个那就conflict原创 2020-05-09 15:49:26 · 119 阅读 · 0 评论 -
hdu 3639 Hawk-and-Chicken(求被指(直接+间接)最多的点有哪些and值)
题目链接题意:n个人搞投票,m个关系a->b,表示a投票给b。a投票给b,b投票给c,表明a也投票给c。获得票数最多的那些人当老大,现在问你票数最多是多少,以及有哪些人。也就是求图中点被指(直接+间接)的最大值+集合。思路:强连通缩点,得到dag,然后反向建边,现在只要走入度为0的点就行了,因为入度为0肯定是最优的,如果你还有入度,那入度连接的那个点肯定走的至少比你多一个(本身...原创 2020-05-06 04:17:22 · 140 阅读 · 0 评论 -
hdu 3416 Marriage Match IV (问图中最多有多少条从a到b互不相关的路径(i.e. 一条路不能走两次)(限制:路径要最短) 最短路+最大流)
题目链接淦!看了3个小时原来是自己定义的宏定义坑了自己!我的宏定义ms(a,0)就是memeset(a, 0, sizeof(a)),然后在函数内传入指针p,然后ms(p, 0),memset的定义 : void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。所以我ms(p, 0)并不是把...原创 2020-05-01 04:07:24 · 284 阅读 · 0 评论 -
hdu 1827 Summer Holiday(tarjan缩点)
题目链接思路:先tarjan缩一下点,然后看每个集团之间的连线,发现需要的花费就是每个入度为0的集团里最小的花费之和,记录有多少个入度为0的集团,把集团中的最小花费加起来就行了。可以和hdu 2767类比一下,问法有点类似,简单的说这道题只要满足a->b,而hdu 2767那道题要满足a->b和b->a。#include <bits/stdc++.h>#d...原创 2020-04-30 02:02:53 · 145 阅读 · 0 评论 -
hdu 2767 Proving Equivalences(求最少加几条边使图变为强连通图)
题目链接思路:先用tarjan缩点然后说结论:设in0为图中入度为0点的个数,out0为图中出度为0点的个数,最少需要加max(in0, out0)才能使图变为强连通图。当然,如果已经是强连通图的情况要特判一下。个人的理解是这样的,因为强连通图每个点的入度和出度肯定是>=1的,所以目标就是让图中的每个点入度和出度都>=1就能变成强连通图, 而每次加边最多只能同时消灭一个入度为...原创 2020-04-30 00:18:32 · 278 阅读 · 0 评论 -
hdu 4725 The Shortest Path in Nya Graph (加虚拟点建图+最短路)
我因为加了点变成一个2n个点,一开始dij没传入2n,没过,后来看了半天,原来是初始化时候没传入2*n,枯了。思路:把每一层也当做一个点,所以这样一共就有2n个点,假设x点在y层,我的思路y层的点标为(y+n),然后为x到(y+n-1)和(y+n+1) [ps:如果在[n+1,2n]范围内的话]加上一条权值为c的单向边,为(y+n)到x加上一条权值为0的单向边,当然我看别人做法有把每一层分成一...原创 2020-04-29 21:43:47 · 125 阅读 · 0 评论 -
hdu 2874 Connections between cities (lca在线询问)
题目链接思路:第一次做多颗树合用一个lca,记录一下,其实就是一开始init,在加边的时候做一下并查集,把一棵树上的点都算到一个集合去,然后遍历1到n,如果fa[i] == i的话就搞一下lca,这里多颗树是共用一个欧拉序的,但不影响此模板的正确性,因为记录第一次数显的位置的都是正确的。初始化 -> lca+st表 -> 在线询问。数据有点水把,最极限情况1e10应该要开lon...原创 2020-04-29 02:02:20 · 131 阅读 · 0 评论 -
LOJ 1074(SPFA最短路+判断有无负环+找负环)
题目链接思路:spfa复杂度O(VE),可以跑,先判断有没有负环,有的话就dfs一下那个点,把第一次找到的那个负环给找出来。最后先判断x是不是负环的一部分,是的话就输出?(距离可以无限变小)。然后判断dis[x]是不是INF,如果是INF,就一定到不了,有两种情况。1.如果有负环,负环肯定能到点1,但dfs了一下发现x到不了,x到不了负环,所以x也到不了1。2.如果没有负环,那就spfa跑...原创 2020-04-28 01:08:53 · 190 阅读 · 0 评论 -
有向图和无向图最大距离的总结
前言:感觉每次遇到有向图或无向图的题都是比赛时候嫌自己写的太乱,写了一半就不想写了,赛后看别人的代码直接orz,也太简洁了,所以今天打算对之前做过的图的各种距离问题进行一个总结,以后做到跟图有关距离有关的问题也持续更新在这里了。1.无向图的直径(模板)cf 1294f : 题目链接题意:给你一个图,让你在这个图里选3个点,问你怎样选才能使得这三个点连线之间包含的边数最多,最后输出最多的边...原创 2020-02-17 23:14:53 · 2649 阅读 · 0 评论 -
AtCoder Beginner Contest #148 题解
比赛链接D.给你n个数,问你最少取走多少个后剩下的n个能组成1~n的有序数列。思路:找原来n个数中最长的1~n的序列的长度,用n减去这个长度即可。E.给你一个n(0 <= n <= 1e18), 问你n * (n - 2) * (n - 4) * …的值是多少。其中你可以认为n = 0和n = 1时的值都是1。现在问你乘积结尾有多少个0。思路:此题是求 !n 结尾有多...原创 2019-12-23 04:06:13 · 148 阅读 · 0 评论