![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
Luowaterbi
Lazy, Stupid Trash
展开
-
BZOJ1912 [Apio2010]patrol 巡逻
两次BFS求直径只能用于书上没有负权边的时候!树形DP求树的直径可以用于任何情况!本题众所周知的解法是先求出第一次直径的长度,再将直径全变成1,再求一次直径。第一次求直径用BFS,因为容易回溯出来直径;第二次求直径用树形DP,因为有负权边。#include <cstdio>#include <iostream>#include <vector>#include <string>#include <queue>#include原创 2021-01-22 17:02:44 · 162 阅读 · 0 评论 -
CH6202 黑暗城堡 最短路径生成树
如果没有负权边,就从路径长度单调递增上考虑问题。跑完最短路后,让点根据离1的距离排个序。这样就可以统一顺序,后面的点一定是接在前面的点后面。最小路径生成树上增加一个点实际上跟他具体形状没有任何关系,直接暴力判断能不能贴在前面的点后面就行。而且把这个点贴在哪里(所有合法的位置)都是无所谓的。注意路径的初始化成INF!#include <bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define re原创 2021-01-21 22:08:33 · 213 阅读 · 0 评论 -
POJ2728 Desert King 最优比率生成树
一开始没理解最优比率生成树为什么要用最小生成树。书上说的是最大生成树,我一开始觉得是最大生成树,但这样求出来是合法值的最大值,也不是题目上的最小值啊。后来我发现,是在0/1规划二分的意义上理解出错了。在一般的二分答案中,比如函数是单调递减的,>0的都不是解,<0的都是解,=0的是我们可能要求的解里面的最大值。但是对于0/1规划,二分的是唯一解,>0、<0的都不是解,只有=0的是解。我们设二分的比率是kkk,树用xxx表示,最小生成树用xminx_{min}xmin表示,最大生原创 2021-01-21 20:49:31 · 205 阅读 · 0 评论 -
POJ1639 Picnic Planning 限定度数的最小生成树
题意:求满足一个点限定度数情况下的最小生成树。题解:这题写的是真的麻烦。不考虑限制度数的点park,将剩下几个连通块求出最小生成树,prime一边染色一边最小生成树即可,过程中使用的边进行标记。将park先连上各个连通块最短的边,此时的生成树并不是最优的。此时只有park剩下的边可能对减小结果,因此判断park剩下的边能不能减小贡献就行。对一个树,加上一个边一定会形成环。BFS出这个环,找到最大的边,减去加上的边就是贡献。跑到park的度满了或者加边没有贡献为止。AC代码:#inclu原创 2021-01-20 21:10:15 · 142 阅读 · 0 评论 -
POJ1094 Sorting It All Out
题意:n个字母给m个大小关系,如果可以分出关系,输出需要前多少个关系以及最后的顺序;如果关系矛盾,输出在第几个发生矛盾;不能判断关系输出指定内容。题解:挺裸的Floyd,比较傻X的是我纠结了好久怎么判断和输出正确的关系……直接统计矩阵的小于出现次数,如果等于n∗(n−1)/2n*(n-1)/2n∗(n−1)/2说明所有关系都判断出来了;输出的话,计算第iii行有多少个小于,n-这个数的结果就是第iii个字符的位置。AC代码:#include <cstdio>#include <原创 2021-01-17 19:16:34 · 136 阅读 · 0 评论 -
AcWing341 CH6101 最优贸易
题意:一个有向图,一个物品在每个点有不同的价值,从起点到终点的路径上,可以先在某个点买一个,再在某一个点卖掉,问能赚到最多的钱是多少。题解:一开始以为是求路径上最大点权之差,但是发现必须先买才能在卖,顺序不能反。 这样一个问题,我们将其分割成两个单调的子问题,从起点到一点的路径上,能用最少多少钱买到物品;从一点到终点,能用最多多少钱卖掉物品。在第一个问题里把物品价值取相反数,在第二个问题里建一个反图,就成了两个相同的问题。遍历每个点,用最多的钱减去最少的钱就是答案。注意不能反过来。不能说从起点到一点原创 2021-01-16 22:24:18 · 150 阅读 · 0 评论 -
分层最短路 POJ3662 CF1473E
看到要求有一定要求的路径,想到分层最短路。在思考分层最短路的时候,注意转化。在POJ3662中,题目要求我们使路径中第k+1的边尽量小。但设计DP时,dp[i][j]表示在点i已经指定j条边免费的最大边权。而不是表示到点i路径中第j大的边。在前一种情况中,可能我们设置免费的j条边不一定是前j大的边,但是通过状态转移,最优的情况一定会出来;而如果使用后者,状态转移方程显然没有前者简单。#include <cstdio>#include <iostream>#inclu原创 2021-01-16 19:05:48 · 171 阅读 · 0 评论 -
Dijkstra和SPFA杂想
实际上在没有负环的图上写堆优化的Dijstra和堆优化的SPFA是一样的,所以回去重新考虑了为什么只能用SPFA判断负环。在不考虑堆优化的时候,Dijstra与SPFA实际上是两种思想。Dijstra是贪心的思想,和Prime挺像的。Dijstra不只是不能判断负环,它不能用于存在负边的图。所以在一个没有负边的图上,先通过起点的边e找到离起点最近的点v,这个v到起点的最短距离一定是e的边权。走别的点再到v一定没有直接到v优。再用这个最近的的点v更新起点到别的点的距离,标记这个点已经有答案,重复上述过原创 2021-01-16 11:25:16 · 199 阅读 · 0 评论 -
POJ3565Ants
AntsTime Limit:5000MS Memory Limit:65536K Total Submissions:8345 Accepted:2651 Special Judge DescriptionYoung naturalist Bill studies ants in school. His ants feed ...原创 2019-09-18 20:34:25 · 139 阅读 · 0 评论 -
POJ2446Chessboard
ChessboardTime Limit:2000MS Memory Limit:65536K Total Submissions:21308 Accepted:6683 DescriptionAlice and Bob often play games on chessboard. One day, Alice draws a board ...原创 2019-09-17 21:07:35 · 178 阅读 · 0 评论