图论
moyangxian
总会过去的
展开
-
HDU - 1269 迷宫城堡(判断强连通)
题意:判断一个图是否为强连通图题记:三种做法做法一:暴力,直接dfs每个点判断是否能到达其他n-1个点。#include<iostream>#include<cstring>using namespace std;const int N=1e5+10;struct Edge{ int x,y,next;}edge[N];int head[N],vis[10010];int n,m,cnt;void dfs(int x){ if(cnt==n-1原创 2020-12-21 20:50:09 · 150 阅读 · 0 评论 -
HIDU - 1285 确定比赛名次(拓扑排序)
题目链接题记:用邻接表建单向图,然后拓扑排序,bfs遍历时用优先队列即可使编号小的队伍在前。#include<iostream>#include<cstring>#include<queue>using namespace std;const int N=510;struct Edge{ int to,next;}edge[N];in...原创 2020-05-05 20:56:17 · 132 阅读 · 0 评论 -
二分图的最大匹配(匈牙利算法)
题目链接模板:模板来自AcWingint n1, n2; // n1表示第一个集合中的点数,n2表示第二个集合中的点数int h[N], e[M], ne[M], idx; // 邻接表存储所有边,匈牙利算法中只会用到从第一个集合指向第二个集合的边,所以这里只用存一个方向的边int match[N]; // 存储第二个集合中的每个点当前匹配的第一个集合中的点是...原创 2020-04-29 14:54:16 · 133 阅读 · 0 评论 -
染色法判定二分图(模板题)
题目链接模板:模板来自AcWingint n; // n表示点数int h[N], e[M], ne[M], idx; // 邻接表存储图int color[N]; // 表示每个点的颜色,-1表示未染色,0表示白色,1表示黑色// 参数:u表示当前节点,c表示当前点的颜色bool dfs(int u, int c){ color[u] = ...原创 2020-04-29 10:47:02 · 294 阅读 · 0 评论 -
Kruskal算法求最小生成树(模板题)
题目链接模板:模板来自AcWingint n, m; // n是点数,m是边数int p[N]; // 并查集的父节点数组struct Edge // 存储边{ int a, b, w; bool operator< (const Edge &W)const { return w < W.w...原创 2020-04-29 10:26:44 · 629 阅读 · 0 评论 -
Prim算法求最小生成树(模板题)
题目链接模板:模板来自AcWingint n; // n表示点数int g[N][N]; // 邻接矩阵,存储所有边int dist[N]; // 存储其他点到当前最小生成树的距离bool st[N]; // 存储每个点是否已经在生成树中// 如果图不连通,则返回INF(值是0x3f3f3f3f), 否则返回最小生成树的树边权重之和...原创 2020-04-29 10:13:36 · 778 阅读 · 0 评论 -
Gym-102411E
题意:找出图中的一个点,使m个点到这个点的时间相同。题记:由于每个路径都是1,所以可以用bfs做,把所有起点存入队列,记录下这个点的深度和遍历的次数,当有一个点遍历了m次则输出。#include<iostream>#include<queue>#include<cstring>#include<cstdlib>using namespac...原创 2020-04-24 15:19:50 · 252 阅读 · 0 评论 -
HDU 1285 确定比赛名次(拓扑排序)
题目链接题记:用邻接表存图,然后把拓扑排序中的队列改成优先队列,每次取队头元素时用ans数组存下来即可。(题目n最大500,用邻接矩阵也可以)。#include<iostream>#include<queue>#include<cstring>#include<vector>using namespace std;const int N...原创 2020-04-21 18:16:00 · 91 阅读 · 0 评论 -
spfa求最短路
题目链接给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible。数据保证不存在负权回路。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出”...原创 2020-04-21 15:08:13 · 88 阅读 · 0 评论 -
有边数限制的最短路(bellman-ford算法)
题目链接给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出从1号点到n号点的最多经过k条边的最短距离,如果无法从1号点走到n号点,输出impossible。注意:图中可能 存在负权回路 。输入格式第一行包含三个整数n,m,k。接下来m行,每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示从1号点到n号点的...原创 2020-04-21 14:56:03 · 177 阅读 · 0 评论 -
Dijkstra求最短路
题目链接给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出-1。数据范围1≤n,m≤1.5×10...原创 2020-04-21 14:46:40 · 81 阅读 · 0 评论 -
Dijkstra求最短路
题目链接给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出-1。数据范围1≤n≤500,1≤m≤...原创 2020-04-21 14:24:05 · 192 阅读 · 0 评论 -
有向图的拓扑序列
题目链接给定一个n个点m条边的有向图,点的编号是1到n,图中可能存在重边和自环。请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出-1。若一个由图中所有点构成的序列A满足:对于图中的每条边(x, y),x在A中都出现在y之前,则称A是该图的一个拓扑序列。输入格式第一行包含两个整数n和m接下来m行,每行包含两个整数x和y,表示存在一条从点x到点y的有向边(x, y)。输出格式...原创 2020-04-21 13:30:45 · 476 阅读 · 0 评论 -
图中点的层次(图的宽度优先遍历)
题目链接给定一个n个点m条边的有向图,图中可能存在重边和自环。所有边的长度都是1,点的编号为1~n。请你求出1号点到n号点的最短距离,如果从1号点无法走到n号点,输出-1。输入格式第一行包含两个整数n和m。接下来m行,每行包含两个整数a和b,表示存在一条从a走到b的长度为1的边。输出格式输出一个整数,表示1号点到n号点的最短距离。数据范围1≤n,m≤105输入样例:4 5...原创 2020-04-21 13:19:19 · 302 阅读 · 0 评论 -
HDU 1269 迷宫城堡(邻接表+dfs)
题目链接题记:用邻接表存图,然后以每一个房间为开头dfs遍历,如果有一个房间不能到达n-1个其他的房间,那么就不符合题目要求。#include<iostream>#include<cstring>using namespace std;const int N=1e5+10;struct Edge{ int x,y,next;}edge[N];int ...原创 2020-04-18 13:52:29 · 93 阅读 · 0 评论