图论专题
文章平均质量分 56
收集各类图论专题。(网络流专题额外开了一个专栏)
SC.ldxcaicai
我很菜=_=
展开
-
SCU4444 Travel(最短路+bfs)
传送门题意简述:给出一张nnn个点的完全图,有mmm条边边权为aaa其余点边权为bbb,问从111到nnn的最短路。思路:分类讨论一波即可。(1,n)(1,n)(1,n)的边权为aaa,那么只用求从111到nnn不经过给出边的最短路,这个用set+bfsset+bfsset+bfs解决。(1,n)(1,n)(1,n)的边权为bbb,那么只用求从111到nnn经过给出边的最短路,上spf...原创 2019-01-22 18:59:44 · 313 阅读 · 0 评论 -
hdu5195 DZY Loves Topological Sorting(贪心+线段树)
传送门题意简述:给出一张DAGDAGDAG,要求删去不超过kkk条边问最后拓扑序的最大字典序是多少。思路:贪心帮当前不超过删边上限且权值最大的点删边,用线段树维护一下每个点的入度来支持查询即可。注意要在选点的时候更新后继的入度代码:#include<bits/stdc++.h>#define ri register intusing namespace std;inl...原创 2019-01-22 18:54:44 · 224 阅读 · 0 评论 -
zoj3583 Simple Path(并查集+枚举)
传送门题意简述:给出一张图问不在从sss到ttt所有简单路径上的点数。思路:枚举删去每个点然后把整张图用并查集处理一下,同时不跟sss和ttt在同一个连通块的点就是满足要求的点(被删去的不算)。代码:#include<bits/stdc++.h>#define ri register intusing namespace std;inline int read(){...原创 2019-01-22 18:51:03 · 213 阅读 · 0 评论 -
bzoj3875: [Ahoi2014&Jsoi2014]骑士游戏(spfa+dp)
传送门题意简述:nnn个怪物,对于编号为iii的怪物可以选择用aia_iai代价将其分裂成另外的bib_ibi个怪物或者用cic_ici代价直接消灭它,现在问消灭编号为1的怪物用的最小代价。思路:考虑dpdpdp,消灭iii号怪物的代价fi=min{ci,ai∑fv},v指分裂的怪物f_i=min\{c_i,a_i\sum f_v\},v指分裂的怪物fi=min{ci,ai∑fv...原创 2019-01-22 11:57:51 · 236 阅读 · 0 评论 -
uoj#14. 【UER #1】DZY Loves Graph(并查集)
传送门题意简述:要求支持以下操作:在a与b之间连一条长度为i的边(i是操作编号);删除当前图中边权最大的k条边;表示撤销第 i−1次操作,保证第1次,第i−1 次不是撤回操作。要求在每次操作后输出当前图的最小生成树边权和。思路:由于边权为当前操作编号因此相当于边是单调加入的,也就是说我们可以直接上kruskalkruskalkruskal的合并方法。关键在于怎么维护这几个操作。加边...原创 2019-01-22 00:36:13 · 243 阅读 · 0 评论 -
bzoj2753: [SCOI2012]滑雪与时间胶囊(最小生成树)
传送门最小生成树菜题。题意:给出一些有向边,问有向的最小生成树。思路:先dfsdfsdfs一把所有有用的边都存起来,然后按终点点权为第一关键字,边权为第二关键字给边排序保证最小生成树的合法性,排完之后跑kruskalkruskalkruskal就行了。代码:#include<bits/stdc++.h>#define ri register int#define fi ...原创 2019-01-17 16:57:13 · 1383 阅读 · 0 评论 -
2018.11.05 bzoj3124: [Sdoi2013]直径(树形dp)
传送门一道sbsbsb树形dpdpdp第一问直接求树的直径。考虑第二问问的边肯定在同一条直径上均是连续的。因此我们将直径记下来。然后对于直径上的每一个点,dpdpdp出以这个点为根的子树中不走与直径上的节点能得到的最大深度来求出那一段合法边的范围。那么有些什么情况呢?分出了一条跟这个点下面那段直径一样长的那么满足条件的区域最下端不能低于这个点。分出了一条跟这个点上面那段直径一样...原创 2018-11-05 20:17:09 · 148 阅读 · 0 评论 -
2018.11.05 bzoj2143: 飞飞侠(最短路)
传送门最短路好题。考虑对每个二维坐标建立一个高度属性。这样每次如果在点(i,j,0)(i,j,0)(i,j,0)只能选择花费bi,jb_{i,j}bi,j跳向(i,j,ai,j)(i,j,a_{i,j})(i,j,ai,j),然后如果当前状态的高度不是000就可以花费000的代价选择让高度下降一个,同时向周围四格走一步或者原地不动。然后跑三次最短路就可以了。代码:#include...原创 2018-11-05 20:06:28 · 166 阅读 · 0 评论 -
2018.11.05 NOIP模拟 相交(dfs序+bit)
传送门又TMTMTM考原题真是服。考虑到两条路径相交一定满足某一条的lcalcalca在另外一条路径上面。于是分开统计有多少个lcalcalca在当前路径上面以及有多少个路径经过了当前的lcalcalca,再扣去lcalcalca重复的情况就行了。代码...原创 2018-11-05 20:02:04 · 151 阅读 · 0 评论 -
2018.11.05 NOIP模拟 规避(最短路计数)
传送门正难则反。考虑计算两人相遇的方案数。先正反跑一遍最短路计数。然后对于一条在最短路上的边(u,v)(u,v)(u,v),如果(dis(s,u)*2&lt;total&amp;&amp;dis(v,t)*2&lt;total)说明两人可以在这条边上面相遇。如果对于一个点从起点到它的距离刚好是最短路的一半也可以在这个点相遇。代码...原创 2018-11-05 19:58:28 · 148 阅读 · 0 评论 -
2018.11.05 NOIP模拟 列队(差分约束)
传送门直接建边跑差分约束就可以了。代码原创 2018-11-05 19:52:54 · 221 阅读 · 0 评论 -
2018.11.01 洛谷P3953 逛公园(最短路+dp)
传送门设f[i][j]f[i][j]f[i][j]表示跟最短路差值为iii当前在点jjj的方案数。in[i][j]in[i][j]in[i][j]表示在被选择的集合当中。大力记忆化搜索就行了。代码:#include<bits/stdc++.h>using namespace std;inline int read(){ int ans=0; char ch=getch...原创 2018-11-01 23:03:57 · 185 阅读 · 0 评论 -
2018.10.29 bzoj4564: [Haoi2016]地图(仙人掌+莫队)
传送门根据原图建一棵新的树。把原图每一个环上除了深度最浅的点以外的点全部向深度最浅的点连边。然后可以搞出来一个dfsdfsdfs。这个时候我们就成功把问题转换成了对子树的询问。然后就可以对权值分块用莫队做了注意如果不用分块而是用树状数组维护是O(nlognsqrt(n))的代码:#include<bits/stdc++.h>using namespace std;in...原创 2018-10-29 15:05:22 · 338 阅读 · 1 评论 -
2018.10.29 bzoj1023: [SHOI2008]cactus仙人掌图(仙人掌+单调队列优化dp)
传送门求仙人掌的直径。感觉不是很难。分点在环上面和不在环上分类讨论。不在环上直接树形dpdpdp。然后如果在环上讨论一波。首先对环的祖先有贡献的只有环上dfsdfsdfs序最小的点。对答案有贡献的则是环上的任意两个点。对于环上任意两点(i,j)(i,j)(i,j)Ans=max(Ans,f[i]+f[j]+dist(i,j))Ans=max(Ans,f[i]+f[j]+dist...原创 2018-10-29 11:58:36 · 286 阅读 · 0 评论 -
2018.10.29 洛谷P4129 [SHOI2006]仙人掌(仙人掌+高精度)
传送门显然求出每一个环的大小。Ans=∏i(siz[i]+1)Ans=\prod_i(siz[i]+1)Ans=∏i(siz[i]+1)注意用高精度存答案。代码:#include<bits/stdc++.h>using namespace std;inline int read(){ int ans=0; char ch=getchar(); w...原创 2018-10-29 11:53:01 · 204 阅读 · 0 评论 -
2018.10.19 NOIP模拟 比特战争(kruskal)
传送门考完发现是sbsbsb题啊。直接考虑优化状压的转移。可以证明最优解一定在求最小生成树的时候取得。因此再最小生成树时维护一下连通块的最值统计答案就行了。代码...原创 2018-10-19 19:09:29 · 235 阅读 · 0 评论 -
2018.10.16 NOIP模拟 华莱士(并查集)
传送门按照题意模拟维护最小的环套树森林就行了。然而考试的时候naivenaivenaive瞎写了一个错误的贪心。代码原创 2018-10-16 14:21:03 · 242 阅读 · 0 评论 -
2018.09.27 bzoj2118: 墨墨的等式(最短路+背包)
传送门好题啊。首先找到最小的一个非零系数记做a1a_1a1,然后如果WWW modmodmod a1=W′a_1=W&#x27;a1=W′ modmodmod a1a_1a1,且WWW是方程的一个可行解,那么显然W′W&#x27;W′也是一个可行解。自然会想到我们用完全背包的思想对每一个余数求出要达到这个余数的最小可行解,这样整个范围中到达这个余数的可行解个数就可以统计...原创 2018-09-27 19:46:22 · 278 阅读 · 0 评论 -
2018.09.27 网络协议(tarjan)
描述一些学校连接在一个计算机网络上。学校之间存在软件支援协议。每个学校都有它应支援的学校名单(学校 a 支援学校 b ,并不表示学校 b 一定支援学校 a )。当某校获得一个新软件时,无论是直接得到还是网络得到,该校都应立即将这个软件通过网络传送给它应支援的学校。因此,一个新软件若想让所有连接在网络上的学校都能使用,只需将其提供给一些学校即可。任务请编一个程序,根据学校间支援协议(各个学校的...原创 2018-09-27 14:59:36 · 471 阅读 · 0 评论 -
2018.09.27 codeforces1045A. Last chance(线段树优化建图+最大流)
传送门看完题应该都知道是网络流了吧。但是第二种武器直接建图会gg。因此我们用线段树优化建图。具体操作就是,对于这m个人先建一棵线段树,父亲向儿子连容量为inf的边,最后叶子结点向对应的人连容量为1的边。这样给第二种武器对应连边的时候直接给区间连边就行了。对于操作三,我们直接贪心流掉两个人,剩下的一个人不流就行了。代码:#include<bits/stdc++.h>#d...原创 2018-09-27 14:10:34 · 526 阅读 · 0 评论 -
2018.09.26 bzoj5218: [Lydsy2017省队十连测]友好城市(回滚莫队)
传送门比较简单的一道回滚莫队吧。每次询问用bitset优化kosaraju统计答案。就是有点难调。然后向dzyo学长学习了回滚莫队的一种简洁的实现方式,就是直接建立一个sqrt(m)∗sqrt(m)sqrt(m)*sqrt(m)sqrt(m)∗sqrt(m)的动态数组按块存储询问。这样好写得多。还有就是学习了korasaju用bitset优化的写法。代码:#include&amp;amp;amp;lt;b...原创 2018-09-26 16:26:40 · 338 阅读 · 0 评论 -
2018.09.23 关键网线(tarjan)
描述给出一个无向连通图,即在任一个点对间存在路径。有的点提供服务a, 有的点提供服务b 。同一个点可能有两种服务类型。每个点必须与提供2种服务的点连通。如果一个边断掉,就可能出现有些点不能被服务到,那么这条边就称为关键边。你的任务是找出关键边数量以及每条关键边。输入第一行是整数N,M,K,L (1&lt;=N&lt;=100000, 1&lt;=M&lt;=1000000, 1&lt;=K&...原创 2018-09-23 16:37:47 · 261 阅读 · 0 评论 -
2018.09.20 atcoder Painting Graphs with AtCoDeer(tarjan+polya)
传送门一道思维题。如果没有环那么对答案有k的贡献。如果恰为一个环,可以用polya求贡献。如果是一个有多个环重叠的双联通的话,直接转化为组合数问题(可以证明只要每种颜色被选取的次数相同一定可以在进行若干次交换之后变成一样的),相当于选一个值域在[1,k][1,k][1,k]中的单调不下降子序列的个数。这个跟bzoj4403求法是相同的。对于序列中的每一个元素的值加上它自己的下标就转化成...原创 2018-09-20 21:13:06 · 317 阅读 · 0 评论 -
2018.09.15 poj1734Sightseeing trip(floyd求最小环)
跟hdu1599差不多.。 只是需要输出方案。 这个可以递归求解。 代码:#include<iostream>#include<cstdio>#include<cstring>#include<cctype>#define inf 50005using namespace std;inline int read(){ ...原创 2018-09-15 17:31:31 · 138 阅读 · 0 评论 -
2018.09.15 hdu1599find the mincost route(floyd求最小环)
传送门 floyd求最小环的板子题目。 就是枚举两个相邻的点求最小环就行了。 代码:#include<bits/stdc++.h>#define inf 0x3f3f3f3f3f3f#define ll long longusing namespace std;inline ll read(){ ll ans=0; char ch=getchar(...原创 2018-09-15 17:29:32 · 498 阅读 · 0 评论 -
2018.09.15 bzoj1977:次小生成树 Tree(次小生成树+树剖)
传送门 一道比较综合的好题。 由于是求严格的次小生成树。 我们需要维护一条路径上的最小值和次小值。 其中最小值和次小值不能相同。 由于不喜欢倍增我选择了用树链剖分维护。 代码:#include<bits/stdc++.h>#define N 100005#define M 300005#define lc (p<<1)#define rc (p&...原创 2018-09-15 15:50:17 · 335 阅读 · 0 评论 -
2018.09.15 秘密的牛奶管道SECRET(次小生成树)
描述约翰叔叔希望能够廉价连接他的供水系统,但是他不希望他的竞争对手知道他选择的路线。一般这样的问题需要选择最便宜的方式,所以他决定避免这种情况而采用第二便宜的方式。 现在有W(3 &lt;= W &lt;= 2000)个供水站,其中最多有P(P &lt;=20,000)&lt; span=”“&gt;条管道,每一条管道连接了两个水站,并且不存在一条管道连接同一个水站,两个水站之间最多只有一条...原创 2018-09-15 14:49:35 · 960 阅读 · 0 评论 -
2018.09.15 vijos1053Easy sssp(最短路)
传送门 貌似可以最短路时同时判定负环啊。 但我不想这样做。 于是写了一个dfs版的判环,bfs版的求最短路。 代码:#include<iostream>#include<cctype>#include<cstdio>#include<cstring>#include<queue>#define N 1005#d...原创 2018-09-15 14:10:33 · 212 阅读 · 0 评论 -
2018.09.15 hdu3018Ant Trip(欧拉路)
传送门 显然答案等于各个连通分量的笔画数之和。 因此我们dfs每个连通分量计算对答案的贡献。 对于一个连通分量,如果本来就有欧拉回路那么只需要一笔。 否则需要寄点数/2那么多笔才能画完。 知道这个结论这题就很简单了。 代码;#include<bits/stdc++.h>#define N 100005#define M 200005using namespac...原创 2018-09-15 13:36:29 · 130 阅读 · 0 评论 -
2018.09.15 poj2117Electricity(割点)
传送门 其实求一个图删除一个点之后,联通块最多有多少。 直接tarjan求割点更新答案就行了。 但注意原图不一定连通。 代码:#include<iostream>#include<cstring>#include<cstdio>#include<vector>#define N 10005using namespace st...原创 2018-09-15 01:25:54 · 294 阅读 · 0 评论 -
2018.09.15[POI2008]BLO-Blockade(割点)
描述There are exactly nn towns in Byteotia. Some towns are connected by bidirectional roads. There are no crossroads outside towns, though there may be bridges, tunnels and flyovers. Each pair of to...原创 2018-09-15 00:42:45 · 172 阅读 · 0 评论 -
2018.09.15 poj1041John's trip(欧拉路输出方案)
传送门 一个欧拉路输出方案的板子题。 竟然难在读入233。 代码:#include<iostream>#include<cstdio>#include<cstring>#define N 55#define M 2005using namespace std;struct edge{int u,v,id;}e[M];int n,m,d...原创 2018-09-15 00:35:00 · 202 阅读 · 0 评论 -
2018.09.13 poj2728Desert King(最优比率生成树)
传送门 01分数规划经典题。 不过用krsukal会T掉。 这题用prim反而更快(毕竟是完全图) 因此直接二分+最小生成树搞定。 代码:#include<iostream>#include<cctype>#include<cmath>#include<algorithm>#include<cstring>#i...原创 2018-09-13 20:08:36 · 168 阅读 · 0 评论 -
2018.09.12 earthquake(最优比率生成树)
描述地震已经破坏了农夫约翰所有的农场以及所有连接农场的道路。作为一个意志坚强的人,他决定重建所有的农场。在重建全部N(1 &lt;= N &lt;= 400)个农场之前,首先必须把所有农场用道路连接起来,即任意两个农场之间必须有至少一条通路。 在研究了地图之后,农夫约翰已经得出了结论:M(1 &lt;= M &lt;= 10,000)条双向的道路可以在较短的时间内建造好。由于约翰的资金有限,...原创 2018-09-12 20:58:49 · 326 阅读 · 0 评论 -
2018.09.12 poj3621Sightseeing Cows(01分数规划+spfa判环)
传送门 01分数规划板题啊。 发现就是一个最优比率环。 这个直接二分+spfa判负环就行了。 代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define N 1005#define...原创 2018-09-12 20:15:37 · 163 阅读 · 0 评论 -
2018.09.11 bzoj2208: [Jsoi2010]连通数(bitset+floyd)
传送门 听说正解是缩点+dfs? 直接bitset优化floyd传递闭包就行了。(尽管时间复杂度是假的O(n3/32)O(n3/32)O(n^3/32)) 代码:#include&lt;bits/stdc++.h&gt;using namespace std;bitset&lt;2005&gt;f[2005];int ans=0,n;char s[2005];int main(...原创 2018-09-11 20:43:34 · 227 阅读 · 0 评论 -
2018.09.09 poj2949Word Rings(01分数规划+spfa判环)
传送门 这题要先巧妙的转化一下。 对于每个字符串,我们把头尾的两个小字符串对应的点连边,边权是这个字符串的长度。 这样最多会出现26*26个点。 这个时候就只用求出边权和跟边数的最大比值了。 这个显然01分数规划+spfa判环解决。 注意用dfs版的spfa要快一些。 代码:#include<iostream>#include<cstdio>#in...原创 2018-09-09 14:10:35 · 217 阅读 · 0 评论 -
2018.08.29 NOIP模拟 table(拓扑排序+建图优化)
给出一个表格,N 行 M 列,每个格子有一个整数,有些格子是空的。现在需要你 来做出一些调整,使得每行都是非降序的。这个调整只能是整列的移动。【输入】第一行两个正整数 N 和 M。 接下来 N 行,每行 M 个整数,-1 表示这个格子是空的,其他的整数都在 [0, 10^9]范围,表示格子的数字。【输出】若无解,输出 -1; 否则输出任意一个解,即一行 M 个正整数 ...原创 2018-10-11 23:29:57 · 181 阅读 · 0 评论 -
2018.08.17 洛谷P3110 [USACO14DEC]驮运(最短路)
传送门 一道sb最短路,从两个起点和终点跑一边最短路之后直接枚举两人的汇合点求最小值就行了。 代码:#include<bits/stdc++.h>#define N 40005#define inf 0x3f3f3f3fusing namespace std;struct Node{int v,next;}e[N<<1];int first[N],cn...原创 2018-08-17 19:55:59 · 153 阅读 · 0 评论 -
2018.07.25 bzoj2125: 最短路(圆方树+倍增)
传送门 人生的第一道仙人掌。 这道题求是仙人掌上的最短路。 先建出圆方树,然后用倍增跑最短路,当lcalcalca是圆点和方点时分类讨论答案即可。 代码如下:#include&lt;bits/stdc++.h&gt;#define N 20005using namespace std;inline int read(){ int ans=0; char ch=ge...原创 2018-07-25 21:44:45 · 180 阅读 · 0 评论