
图论
罗马字母3
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
图论
BFS基本模板大致题意:给你一个有向无环图,问从任意度数为0的节点出发到达节点n的最短路(边长为1)解法: 首先看到是一个有向无环图,再看到选了课程A之后才能选课程B,第一反应是拓扑排序之后dfs,但是拓扑排序的结果不会唯一,因此工作量会很大,会T,之后看到题解之后发现倒着一遍bfs即可。 Bfs过程中,当遍历到一个顶点的时候,如果这个结点没有出度,即没有节点与之相邻,便可以退出。 ...原创 2018-06-08 12:53:26 · 463 阅读 · 0 评论 -
Codeforces667D(spfa+dp)
题意: 给定一个带权有向图,若P(A,B)表示节点A到B的最短路长度,选择四个节点ABCD,使得P(A,B)+P(B,C)+P(C,D)最大。 节点数n在1,000以内,边数m在2,000以内。 思路: 首先先将两两点之间的最短路都算出来。 之后建立pre和next两个数组,但在这里我用结构体保存其权值和编号一直算不出正确结果,退而求其次,只保存最长路径排名前三的结点,每次遇到一个更长的...原创 2018-06-08 12:55:29 · 234 阅读 · 0 评论 -
POJ2226(二分图建图/最小点覆盖)
题意: 给定m*n的棋盘,有若干只咕咕。希望去掉一部分咕咕使得剩下的咕咕在上下左右四个方向越过咕咕槽的情况下都看不到咕咕。 思路: 建立一个二分图的方法有很多,这里采用xy二分。 假设没有咕咕槽的情况下,咕咕的最大放置数其实有点像八皇后问题,当然这里我们用最大匹配的思路求解。 当一个位置上放置了咕咕,那么其坐标(x,y)便被移除了待选集合,由此可见,如果建立一个X和Y的二分图,那么最大...原创 2018-06-08 12:55:38 · 321 阅读 · 0 评论 -
POJ1776(哈密顿路径)
题目: http://poj.org/problem?id=1776题意: 给出一个n*n的矩阵,若第i个任务做完之后可以做第j个任务,则矩阵的第i行第j列为1,否则为0。机器完成一项任务之后会自动转到下一个任务,否则机器会自动停止。 求出最少的启动次数,输出每次启动次数完成的任务个数和任务序列。思路:题目给出一个竞赛图(即任意两点之间有且仅有一条有向边的有向图),则竞赛图一定存...原创 2018-06-08 12:55:56 · 649 阅读 · 0 评论 -
HDU1304(差分约束)
题意: 给你 n 个区间 [Ai, Bi],要求从每个区间中至少选出 Ci 个数出来组成一个序列 问:满足上面条件的序列的最短长度是多少? 解法: 对于 不等式 f(b)-f(a)>=c,建立 一条 b 到 a 的边 权值为 c,则求的最长路 即为 最小值(集合) 并且有隐含条件:0<=f(a)-f(a-1)<=1 则有边权关系(a,a-1,0)以及(a-1,...原创 2018-06-08 12:56:08 · 283 阅读 · 0 评论 -
Codeforces #454 div1 C party(状态压缩bfs)
题意: 给你N个点的一幅图,初始图中有M条边,每次操作可以使得一个点连接的所有点变成一个团,问你最少多少次操作可以使得整个图变成一个团.解法: 因为N很小 所以我们可以二进制压缩来表示一个点与其他点之间的关系。二进制的第i位代表标号位i+1的人。例如标号为1的人认识标号为3与5还有7的人,标号为1的二进制压缩结果就为0000000000000000001010101(标号为i的人肯定认识他...原创 2018-06-08 12:56:18 · 165 阅读 · 0 评论 -
51nod1326 遥远的旅途(spfa+dp)
题意: 给出一个无向图,问从1到n是否存在一条长度为L的路径。 n,m<=50,1<=路径长度<=10000,L<=10^18思路: 改变一下思路,我们发现,假设从起点1走到终点N有一条路径的长度为a,假设它再往一条与终点相连的长为b的路径反复走无数次后使得路径长度到达了T,那么一定有(T-a)%(2*k)==0,即**T%(2*k)=a%(2*k),所以我们只...原创 2018-06-08 12:56:31 · 239 阅读 · 0 评论 -
欧拉路径(非递归)--模板
题意: 有n个点,m条边,问能不能找到一条路把所有的边都经过一次。求解思路: 因为是要遍历所有的边,所以这个问题就可以规约到求一个图的欧拉路径上。 但是这道题的数据是比较严格的,我们不能写递归,因此就要用非递归写欧拉回路,参考博客如下: https://blog.youkuaiyun.com/kk303/article/details/10552441 为了压缩空间使用了向前星,参考博客如下: ...原创 2018-06-08 12:56:42 · 290 阅读 · 0 评论 -
spfa--模板
题意: 给定数字n,m,(1≤n,m≤500000) 将n变为n*2的花费为2,将n变为n-3的花费为3,要求过程当中所有数字都在[1,500000]区间内。 求将n变为m的最少花费。思路: 将每个数字视为图论中的点,数字之间的转换视为图论中的边。有向图! 500000个点,连边(i,i*2)权值为2,连边(i,i-3)权值为3 求n至m的最短路就是最小花费 除Floyd之外的方...原创 2018-06-08 12:58:09 · 144 阅读 · 0 评论 -
最小生成树--模板
题意:N个城堡,M个桥,每个桥的权值都不一样,题目要求能使城堡彼此联通的所有桥集合里面权值最小的那种,由此可以判断这是一道求最小生成树的题。#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;const int maxn = 2000 + 5, maxm = 2...原创 2018-06-08 12:58:17 · 369 阅读 · 0 评论 -
联通快--模板
求联通快模板 Uva 油田#include<cstdio>#include<iostream>#include<string.h>using namespace std;const int maxn = 1000 + 5;char g[maxn][maxn];int m, n, id[maxn][maxn];void dfs(int r...原创 2018-06-08 12:58:26 · 264 阅读 · 0 评论 -
最大流--模板
题意:问能否构造一个矩阵,使得矩阵中的每个数字范围是1-20并且满足矩阵每行之和与矩阵每列之和与所给数组相等。思路:尽管矩阵是20*20 ,但是如果爆搜复杂度依旧爆炸,我们考虑使用网络流解决这个问题,下面重点讲解怎么构图。至于怎么写可以参考紫书,与网上的模板。建图:先来考虑本题的限制是什么,首先i行与j列 存在着一个关系 即共用元素k[i][j],如果我们把数组A[i]和B[j]分别看成节...原创 2018-06-08 12:58:34 · 265 阅读 · 0 评论 -
最小生成树与次小生成树
题意:给出两个不同方案,每个方案使得所有的城堡被连通(形成连通图),同时使边权之和尽量小,问第一个方案与第二个方案的大小关系。解题思路: 因为m个桥能使n个城堡联通,而两个大爷的方案中至少存在一个桥不相同,那么我们判断这是一个求次小生成树的方法。 求次小生成树模板: https://blog.youkuaiyun.com/alice_991/article/details/48225949 枚举+...原创 2018-06-08 13:00:32 · 551 阅读 · 2 评论 -
二分图最大匹配模板
const int maxn=1505;//这个值要超过两边个数的较大者,因为有linkint link[maxn];bool used[maxn];vector<int>G[maxn];int uN;////为点的个数,如果编号从0开始就是n,否则就是n+1;bool dfs(int u){ for(int i=0;i<G[u].size();i++){ ...转载 2018-07-31 00:48:50 · 162 阅读 · 0 评论