
---图论---
Park Corsa
吃早餐,多运动,不熬夜,常反思
展开
-
洛谷P1347 排序
传送门读完会发现这题很明显是一个缝合怪,给你一张图,让你在线做三个任务:1.判断所有点是否能构成一条链(不考虑其他多余边)2.判断是否有环 3.没有1、2就输出Sorted sequence cannot be determined.任务1: 乱搞(我用的dfs,大佬们有更加优雅的做法请自便)任务2:用拓扑排序判断以下所有点是否都遍历过任务3:会前面2个任务你就会这个任务了以下为可忽略内容:用short卡了空间请大佬轻喷(结果还没卡到最优解)因为数据规模太小,所以代码写的很丑,可能常数很大c原创 2021-08-15 21:06:16 · 164 阅读 · 0 评论 -
洛谷P1137 旅行计划
传送门继续复习拓扑排序……首先X在Y西面即X向Y连接了一条有向边,不考虑“地球是圆的”的情况下,我们可以判断这是一个DAG用f[i]f[i]f[i]直到路线上点iii经过点数最大值,那么对f[i]f[i]f[i]产生贡献的点,也一定是对iii的入度产生贡献的点,于是有了利用拓扑排序的状态转移方程:f[i]=max(f[i],f[j]+1),∃edge:j→if[i]=max(f[i],f[j]+1),\exist edge:j\rightarrow if[i]=max(f[i],f[j]+1),∃e原创 2021-08-14 23:03:52 · 214 阅读 · 0 评论 -
洛谷P1038 [NOIP2003 提高组] 神经网络
传送门首先吐槽一下出题人的语文水平,读题真的很难受看到题面能够明显意识到这是一个DAG,需要按优先级计算状态,于是考虑借助拓扑排序来完成计算注意一个细节:输入层的阈值没有用#include<bits/stdc++.h>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,原创 2021-08-14 17:44:39 · 335 阅读 · 0 评论 -
洛谷P4180 [BJWC2010]严格次小生成树
之前写过一次,但是理解不深刻,复习之后有了更加细节的一些理解好了进入正题首先,我们需要知道次小生成树一定是在最小生成树的邻集中,即次小生成树与最小生成树只会有一条边的差别所以我们会想枚举所有非树边,看看哪条换进去可以得到次小生成树而非树边去替换哪条树边又是一个问题,但是如果你注意到当前这条非树边与树上的一些树边构成了环——其实也就是这条非树边的两端点的LCA与之成环了意识到这一点,问题就会简单许多,我们可以利用LCA中的倍增思想,维护路径上的权值最大边事实上,我们还需要维护路径上的权值次大边——原创 2021-08-12 23:51:44 · 167 阅读 · 0 评论 -
洛谷P1462 通往奥格瑞玛的道路
出题人又双叒叕考察OIer的语文水平底线读懂题面之后会发现答案明显具有单调性,于是想到二分答案每次二分可能的最多的一次收取的费用的最小值,代入图中去验证是否能在满血或者残血的情况下抵达奥格瑞玛因为fi值可能很大,所以用离散化进行了优化料想不少神仙都写的是SPFA或Dijkstra,我就另辟蹊径写了一发DFS,本质上没有什么区别,不过喜欢写深搜的同学可以看看#include<bits/stdc++.h>using namespace std;inline char nc(){原创 2021-08-12 11:16:19 · 121 阅读 · 0 评论 -
[FROM WOJ]#3775 次小生成树
#3775 次小生成树题面给定一张 N 个点 M 条边的无向图,求无向图的严格次小生成树。设最小生成树的边权之和为sum,严格次小生成树就是指边权之和大于 sum 的生成树中最小的一个。输入第一行包含两个整数 N 和 M,表示无向图的点数与边数;接下来 M 行,每行三个数 x,y,z,表示点 x 和点y 之间有一条边,边的权值为 z输出包含一行,仅一个数,表示严格次小生成树的边权和...原创 2019-03-24 13:59:46 · 284 阅读 · 0 评论 -
[FROM LUOGU]逛公园
传送门SOL这道题的记忆化搜索、最短路DP有很多被卡了的,原因在于没有考虑0边不在路径上的情况,或者按照0边建图跑拓扑导致非0环上的点被误伤这个分层图(其实还是DP)的做法没有被卡:跑拓扑我们在最短路边集(所有dis<=K的路径上的边)上进行(当然你得先跑正反图的最短路)那么显然非0环至少有一条边不会被加进去,而0环会,这也就是导致−1-1−1的原因,所以跑完拓扑判断一下有没有入...原创 2019-10-28 16:40:19 · 132 阅读 · 0 评论 -
[FROM LUOGU]P1772 [ZJOI2006]物流运输
P1772 [ZJOI2006]物流运输传送门SOL由于数据规模很小,可以进行一波乱搞显然我们不需要把所有情况下的最短路跑一遍,那样要跑O(N2)O(N^2)O(N2)次,会TLE(除非有什么xjb剪枝)显然这里有一个DP,设f[i]f[i]f[i]表示前iii天的最小成本,那么我们可以得到一个转移:f[i]=min(f[j−1]+(i−j+1)∗dis[m]+K)f[i]=min(f...原创 2019-10-23 21:39:17 · 204 阅读 · 0 评论 -
[FROM WOJ]#2235 Maintain
#2235 Maintain传送门SOL这道题要求动态维护MST由于数据很小,可以每次跑Kruskal然而sort会超时直接插入排序即可代码:#include<bits/stdc++.h>using namespace std;#define re registerinline int rd(){ int re data=0;static char ch=0;c...原创 2019-10-23 18:32:20 · 179 阅读 · 0 评论 -
[FROM WOJ]#3728 表格
#3728 表格传送门SOL显然拓扑。对于每一行的正数升序排序,按列的原编号顺次连边。显然会重复,如2 2 3 3。显然,对于相同的值,没有必需的拓扑序,可以随便排。于是可以考虑在2 2和3 3之间加虚点,各自向虚点连边。然后跑Topsort。代码:#include<bits/stdc++.h>using namespace std;#define N 5000...原创 2019-10-21 08:12:45 · 144 阅读 · 0 评论 -
[FROM LUOGU][ZJOI2007]最大半连通子图
[ZJOI2007]最大半连通子图传送门SOL题意:在有向图G当中找到最长链,并且统计最长链数量取模Tarjan求了SCC之后,对于每一个连通分量,其中的点都可以两两到达,缩点之后可以保证图上只剩下链对于新图,可以考虑按拓扑序DP设num[i]表示i为链底的最长链长度,dp[i]表示i为链底的最长链个数,siz[i]表示原图i对应的连通分量大小当搜索到u->v的路径时:如果n...原创 2019-10-21 08:08:43 · 142 阅读 · 0 评论 -
图论(CSP-S难度)知识小结(完善中)
图论知识小结序言——先扯几句闲话--最短路--FLOYDSPFADijkstra次短路差分约束系统K短路分层图--生成树--PrimKruskal次小生成树最小树形图最小乘积生成树最优比率生成树--连通性--割点和桥SCCBCC--网络流--最大流费用流--匹配--2-SAT二分图--拓扑--拓扑排序树上背包--杂题--欧拉路LCA基环树线段树优化剩余系离散化序言——先扯几句闲话第一次写知识总...原创 2019-10-20 23:41:53 · 2335 阅读 · 0 评论 -
[FROM BZOJ][Pa2011]Journeys
[Pa2011]Journeys传送门SOL区间加边?听起来很难的样子,但是如果利用线段树的思想,就会非常好办事实上,每个区间都可以作为一个点来处理然后一个区间向其子区间连边修改直接对着区间修改即可然后就可以用权值线段树乱搞啦注意要动态开点代码:#include<bits/stdc++.h>#define ll long long#define re regis...原创 2019-10-20 23:34:00 · 207 阅读 · 0 评论 -
[FROM LUOGU]墨墨的等式
墨墨的等式传送门SOL注意到:B<=1e12,而ai<=5e5,那么如果除掉一个ai也许能过发现:a1x1+a2x2+…+anxn=B->x1+a2/a1x2+…+an/a1xn=B/a1假设:B%mod a1=w(a1为升序sort后的值)则所有w+a1k(k为正整数)都可以由w转到,则考虑0到a1-1共a1个点跑最短路,每次可以跑一条ai权值的边则跑出来的d...原创 2019-10-20 23:21:57 · 171 阅读 · 0 评论 -
[FROM LUOGU]P5022 旅行
P5022 旅行传送门SOLNOIP的题向来废话多,说白了就是求遍历整张图的最小字典序,然而这是个基环树!60pts60pts60pts:用vector存一下每个点的连边,排个序Dfs即可100pts100pts100pts:有环存在?可以确定最多就一个环,考虑枚举删除环上的每一条边,然后Dfs,比较得出最小字典序遍历再输出有些民间数据有些卡常,我之前在本校OJ上T了很久都是93分,后...原创 2019-10-19 21:23:07 · 168 阅读 · 0 评论 -
[FROM WOJ]#2379 奶牛接力
#2379 奶牛接力传送门SOL倍增Floyd的板题设f[i][j][k]f[i][j][k]f[i][j][k]表示从iii走到jjj经过kkk条边的最短路然后就有很显然的dpdpdp式子:f[i][j][k]=min(f[i][t][s]+f[i][t][k−s])f[i][j][k]=min(f[i][t][s]+f[i][t][k-s])f[i][j][k]=min(f[i][t...原创 2019-10-19 20:57:20 · 171 阅读 · 0 评论 -
[FROM BZOJ][Balkan 2011]Timeismoney
#2395 [Balkan 2011]Timeismoney传送门SOL最小乘积生成树的模板题设k=x∗yk=x*yk=x∗y,那么使kkk越大,函数y=k/xy=k/xy=k/x在第一象限的一支就要越靠近坐标轴我们先将按xxx排序和按yyy排序得到的答案求出来,在坐标轴上就是最靠近xxx轴和yyy轴的点显然这不一定是最优的情况于是要尝试在这2个点上进行扩展显然更优的决策一定是出...原创 2019-10-18 08:05:01 · 142 阅读 · 0 评论 -
[FROM WOJ]#3852 电力
#3852 电力tarjan题面求一个图删除一个点之后,联通块最多有多少。输入多组数据。第一行两个整数 P,C表示点数和边数。接下来CCC行每行两个整数 p1p1p1,p2p2p2,表示 p1p1p1与p2p2p2有边连接,保证无重边。读入以000,000 结束。1≤P≤10000,C≥0,0≤p1,p2&amp;amp;amp;lt;P输出输出若干行,表示每组数据的结果。样例输入3 30 10...原创 2019-02-14 17:14:37 · 219 阅读 · 0 评论 -
[FROM WOJ]#3696 tree(BZOJ 2654)
#3696 tree二分是个好东西题面给你一个无向带权连通图,每条边是黑色或白色。让你求一棵最小权的恰好有need条白色边的生成树。 题目保证有解。数据规模和约定 ·10%:V&amp;lt;=1030%:V&amp;lt;=15100%:V&amp;lt;=50000,E&amp;lt;=100000所有数据边权为[1,100]中的正整数。输入第一行V,E,need分别表示点数,边数和需要的白色边数。接下来...原创 2019-02-12 15:47:19 · 165 阅读 · 0 评论 -
[FROM WOJ]#4376 种树
#4376 种树题面有一个N个点M条边的无向图,每次选择一个点,并删除该点及其相邻的边,如果变成了一棵树,这这个点就是我们需要的。请找出满足条件的可能的点。对于 40%的数据:n,m&lt;=1000n,m&lt;=1000n,m<=1000;另外存在 10%的数据:m=n−1m=n-1m=n−1;另外存在 20%的数据:m=nm=nm=n;对于 100%的数据:...原创 2019-02-18 13:47:17 · 181 阅读 · 0 评论 -
[POJ3207]Ikki's Story IV - Panda's Trick
poj3207-Ikki’s Story IV - Panda’s Trick题面liympanda, one of Ikki’s friend, likes playing games with Ikki. Today after minesweeping with Ikki and winning so many times, he is tired of such easy games ...原创 2019-06-09 14:41:42 · 319 阅读 · 0 评论 -
[FROM WOJ]#3668 连通代价
#3668 连通代价题面ZYH接到了一些水管修建任务,工头给了他每个节点的坐标(xi,yi,zi)。任意两点(A、B)的修建隧道的花费可以用(A,B) = min{ |xA-xB|,|yA-yB|, |zA-zB| }来描述。ZYH想尽量节约成本(这样他就有钱去买新的galegame不至于玩盗版了。)请你帮ZYH计算以下成本最低是多少。输入第一行一个正整数 N (1 ≤ N ≤ 100 0...原创 2019-06-15 11:21:05 · 1101 阅读 · 0 评论 -
[FROM WOJ]#3841 双调路径
#3841 双调路径题面如今的道路收费发展很快。道路的密度越来越大,因此选择最佳路径是很现实的问题。城市的道路是双向的,每条道路有固定的旅行时间以及需要支付的费用。路径是连续经过的道路组成的。总时间是各条道路旅行时间的和,总费用是各条道路所支付费用的总和。一条路径越快,或者费用越低,该路径就越好。严格地说,如果一条路径比别的路径更快,而且不需要支付更多费用,它就比较好。反过来也如此理解。如果...原创 2019-06-15 13:36:35 · 657 阅读 · 0 评论 -
[FROM WOJ]#4238 [Noi2013]快餐店
#4238 [Noi2013]快餐店题面小T打算在城市C开设一家外送快餐店。送餐到某一个地点的时间与外卖店到该地点之间最短路径长度是成正比的,小T希望快餐店的地址选在离最远的顾客距离最近的地方。快餐店的顾客分布在城市C的N 个建筑中,这N 个建筑通过恰好N 条双向道路连接起来,不存在任何两条道路连接了相同的两个建筑。任意两个建筑之间至少存在一条由双向道路连接而成的路径。小T的快餐店可以开设在...原创 2019-08-01 20:41:15 · 182 阅读 · 0 评论 -
[FROM WOJ]#1243 蜥蜴 lizard
#1243 蜥蜴 lizard题面在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外。每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平面距离不超过d的任何一个石柱上。石柱都不稳定,每次当蜥蜴跳跃时,所离开的石柱高度减1(如果仍然落在地图内部,则到达的石柱高度不变),如果该石柱原来高度为1,则蜥蜴离开后消失。以后其他蜥蜴...原创 2019-08-13 21:41:40 · 230 阅读 · 0 评论 -
[FROM WOJ]BZOJ1016[JSOI2008]最小生成树计数
BZOJ1016[JSOI2008]最小生成树计数n,m数据规模是骗人的,我信了然后RE了一个点,所以没写题面现在给出了一个简单无向加权图。你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的 最小生成树。(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的)。由于不同的最小生 成树可能很多,所以你只需要输出方案数对31011的模就可以了。输出第一行包含两个...原创 2019-02-17 15:34:20 · 186 阅读 · 0 评论