图论
沙雕.
此人很帅,什么都没有写
展开
-
HDU 3478 Catch(二分图及其性质)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3478 解题思路:题目的意思可以理解为能否存在这样一个步数,使得刚好花费这些步数可以到达所有的点。 那么我们可以把步数假设为无限大。 假设这个步数为偶数(用奇数考虑也可以),那么所有偶数步可以到的点一定能到,对吧。 那么奇数步的点怎样才能到呢,我们需要经过奇数步后,到达原先的偶数点。 怎样才行...原创 2019-05-09 19:27:22 · 135 阅读 · 0 评论 -
图论的一些基础算法的模板
Floyd 算法: 作用:求任意两点最短路 时间:O(V^3) #define for0(i,a,b) for (int i=a;i<b;i++) memset(dp,INF,sizeof dp); for0(i,0,n) dp[i][i] = 0; int u,v,w; for0(i,0,m){ scanf("%d %d %d",&u,&v,&w);...原创 2019-08-15 16:47:05 · 104 阅读 · 0 评论 -
POJ 3259 Wormholes(Floyd/Bellman_ford/SPFA 判负环)
题目链接:http://poj.org/problem?id=3259 解题思路:只要图中存在某个圈,沿着这个圈走一圈之后时间能够回退(即负环),那么一定可以完成题目所说之事。 早期floyd做法 做法判断是否有节点到自身的最短路小于0 1829ms ///*** Floyed 法求任意两点最短路 #include<iostream> #include<algorit...原创 2019-08-15 16:35:46 · 134 阅读 · 0 评论 -
POJ 1251 Jungle Roads(最小生成树)
题目链接:http://poj.org/problem?id=1251 解题思路:是直接的最小生成树裸题。需了解最小生成树的两种算法。 ①kruskal算法 将所有边按照权值从小到大排序,然后遍历边。 用并查集维护最小生成树。 当当前起点和终点不在同一集合,这条边就加入最小生成树。同时,将两个点所在集合并在一起。 复杂度主要取决于边的排序:O(e * log e) //e表示边数 ...原创 2019-05-12 20:10:08 · 151 阅读 · 0 评论 -
HDU 1878 欧拉回路(并查集+欧拉回路判定)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1878 解题思路: ①欧拉回路的定义:从图中某一顶点出发,所有边仅经过一次,最后回到该顶点。 ②判断欧拉回路: 前提:这个图是连通的,也就是所有点都连在一个图上了 无向图:顶点度数为偶数 有向图:所有点入度 = 出度 ③判断是否连通用并查集即可,另外就是度数的统计。 对于并查集陌生可以参...原创 2019-05-11 12:55:40 · 128 阅读 · 0 评论 -
HDU 4857 逃生(反向的拓扑排序)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 解题思路: 题目的意思是让你在一些约束条件下,尽可能的让束缚小编号的编号快点走,从而让这个小编号尽快走。 假设这个过程是破除阻碍尽量让编号小的入场的情景,那么这个过程的反过程就是尽量让编号大的先出场,编号小的即使能出去也不让他们出去直到必须让他们出去。 所...原创 2019-05-11 12:20:40 · 145 阅读 · 0 评论 -
UVA 10004 Bicoloring (二分染色)
题目链接:https://vjudge.net/problem/UVA-10004 题意:给你一个连通图,问能否将每个节点染成两种颜色之一,使得每条边两边的节点颜色不同。 (本质就是二分图的判定,有个定理是:一个无向图为二分图当且仅当图G中无奇数长度的回路。) 解题思路: 可以用dfs染色,对没有染过的点染色,如果该节点之前被染过且与当前要染的颜色不同那么就不能构成二分图。 dfs到了染...原创 2019-05-07 22:21:47 · 188 阅读 · 0 评论 -
HDU 1285 确定比赛名次 (拓扑排序+字典序)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 解题思路:普通的拓扑排序就是按照进入队列的顺序输出点,在队列中的点都是在同一时间都符合要求的,那么怎样保证输出的编号最小?就用优先队列。 代码: #include<cstdio> #include<queue> #include<algorithm> ...原创 2019-05-10 14:14:13 · 157 阅读 · 0 评论 -
HDU 1213 How Many Tables(并查集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213 解题思路:并查集裸题。 并查集两大功能:①合并两个集合②查找某个元素在哪个集合 若并查集数组为uf[],则uf[i]表示编号为i的点的“上级”,如果uf[i] = i表示当前的点是一个集合的“大头目”。 int find1(int x)///找到大头目 { int r = x;...原创 2019-05-07 18:40:45 · 133 阅读 · 0 评论 -
UVA 10305 Ordering Tasks(拓扑排序)
题目链接:https://vjudge.net/problem/UVA-10305 解题思路:单向建边,将终点的入度加一。 当一个点入度为0时,这个点就可以被输出,同时这个点对应所有终点入度减一。 用bfs实现。 代码: #include<cstdio> #include<queue> using namespace std; const int N = 1...原创 2019-05-10 08:37:49 · 90 阅读 · 0 评论 -
HDU 5418 Victor and World(Floyd + 状压DP解决TSP问题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5418 解题思路: 有n座城市,m条边,询问从1节点开始走遍所有节点回来的最短路径。 因为n比较小,因此可以用状压DP做 例如,我们用一个数i表示一种状态,若i转化为二进制为10111,表示去过1,2,3,5,没去过其他城市 先用Floyd求出任意两点最短路,记做mp[][],mp[i][j]...原创 2019-08-17 12:14:34 · 244 阅读 · 0 评论