图论

2019_GDUT_新生专题 图论 --- A

泪湿孤枕 提交于 2020-01-17 02:21:57
A — Cow Contest 原题链接:https://vjudge.net/contest/351234#problem/A 题目大意: 很多cow进行两两pk,给出cow的数目和一些pk的结果,问能确定排名的cow的数目。 题目分析: 这是一道图论,出度和入度的问题。 如果 某cow 打败过 a个(出度数),而被b个打败过(入度数),且满足a+b就是除了本身的所以其他cow的数目,那么就可以确定他的排名就是b+1,即满足出度+入度=顶点个数-1。 代码实现: # include <iostream> # include <cstdio> # define INF 1000001 //Floyd算法 using namespace std ; int n , m , ans ; //牛与牛之间的关系 int dist [ 102 ] [ 102 ] ; int main ( ) { int i , j , k ; int a , b ; ans = 0 ; cin >> n >> m ; //初始化 for ( i = 1 ; i <= n ; i ++ ) { for ( j = 1 ; j <= n ; j ++ ) { if ( i == j ) dist [ i ] [ j ] = 0 ; else dist [ i ] [ j ] = INF ; } } for (

GDUT_寒假训练题解报告_图论专题_个人题解报告——题目:L - Til the Cows Come Home

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-16 21:31:10
GDUT_寒假训练题解报告_图论专题_个人题解报告——题目:L - Til the Cows Come Home 题目: Bessie is out in the field and wants to get back to the barn to get as much sleep as possible before Farmer John wakes her for the morning milking. Bessie needs her beauty sleep, so she wants to get back as quickly as possible. Farmer John’s field has N (2 <= N <= 1000) landmarks in it, uniquely numbered 1…N. Landmark 1 is the barn; the apple tree grove in which Bessie stands all day is landmark N. Cows travel in the field using T (1 <= T <= 2000) bidirectional cow-trails of various lengths between the landmarks. Bessie is not

图论————拓扑排序

ε祈祈猫儿з 提交于 2020-01-16 13:25:42
拓扑排序是一个非常重要的知识点,不只是在图论上会应用到,在其他地方也会涉及。 一.定义 对一个有向无环图(Directed Acyclic Graph, DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若<u,v> ∈E(G),则u在线性序列中出现在v之前。 通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。(百度上抄的,不懂也没事),总之拓扑排序就是一种遍历方式。 二.拓扑序列算法思想 (1)从有向图中选取一个没有前驱(即入度为0)的顶点,并输出之; (2)从有向图中删去此顶点以及所有以它为尾的弧; 重复上述两步,直至图空,或者图不空但找不到无前驱的顶点为止。 代码实现 原题链接: https://www.acwing.com/problem/content/850/ #include<bits/stdc++.h> using namespace std; const int N = 100010, M = 100010; struct EDGE { int to,next; } edge[M]; int d[N]; int n,m; int h[N],cnt; int dis[N]; void add(int u, int v) { edge[++cnt].to=v; edge[cnt]

【图论】【最短路】最短路径问题

谁说胖子不能爱 提交于 2020-01-16 10:51:56
Description 平面上有n个点(N<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点直线的距离。现在的任务是找出从一点到另一点之间的最短路径。 Input 输入文件short.in,共有n+m+3行,其中: 第一行为一个整数n。 第2行到第n+1行(共n行),每行的两个整数x和y,描述一个点的坐标(以一个空格隔开)。 第n+2行为一个整数m,表示图中的连线个数。 此后的m行,每行描述一条连线,由两个整数I,j组成,表示第i个点和第j个点之间有连线。 最后一行:两个整数s和t,分别表示源点和目标点。 Output 输出文件short.out仅一行,一个实数(保留两位小数),表示从S到T的最短路径的长度。 Sample Input 5 0 0 2 0 2 2 0 2 3 1 5 1 2 1 3 1 4 2 5 3 5 1 5 Sample Output 3.41 解题思路 最短路模板,输入的时候需要用公式 求出两个连接的点的距离(边权) Ford算法 未更新的为蓝点,更新过的为白点 d i s [ 1 dis[1 d i s [ 1 ~ 5 ] = ∞ 5]=∞ 5 ] = ∞ 从 1 1 1 出发, 1 1 1 标记为白点 d i s [ 1 ] = 0 , d i s

【luogu3371】【图论】【最短路】【模板】单源最短路径(弱化版)

别来无恙 提交于 2020-01-16 08:11:02
题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779。 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度。 输入格式 第一行包含三个整数 n,m,sn,m,sn,m,s,分别表示点的个数、有向边的个数、出发点的编号。 接下来 mmm 行每行包含三个整数 u,v,wu,v,wu,v,w,表示一条 u→vu \to vu→v 的,长度为 www 的边。 输出格式 输出一行 nnn 个整数,第 iii 个表示 sss 到第 iii 个点的最短路径,若不能到达则输出 231−12^{31}-1231−1。 输入输出样例 输入 #1 4 6 1 1 2 2 2 3 2 2 4 1 1 3 5 3 4 3 1 4 4 输出 #1 0 2 4 3 说明/提示 【数据范围】 对于 20%20%20% 的数据:1≤n≤51\le n \le 51≤n≤5,1≤m≤151\le m \le 151≤m≤15; 对于 40%40%40% 的数据:1≤n≤1001\le n \le 1001≤n≤100,1≤m≤1041\le m \le 10^41≤m≤104; 对于 70%70%70% 的数据:1≤m≤10001\le m \le 10001≤m≤1000,1≤m≤1051\le m \le 10^51≤m≤105; 对于

寒假集训图论H/K

倾然丶 夕夏残阳落幕 提交于 2020-01-16 00:10:28
题目 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路? Input 测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号。为简单起见,城镇从1到N编号。 注意:两个城市之间可以有多条道路相通,也就是说 3 3 1 2 1 2 2 1 这种输入也是合法的 当N为0时,输入结束,该用例不被处理。 Output 对每个测试用例,在1行里输出最少还需要建设的道路数目。 Sample Input 4 2 1 3 4 3 3 3 1 2 1 3 2 3 5 2 1 2 3 5 999 0 0 Sample Output 1 0 2 998 解题思路 要建几条路使得任意两个城镇直接或间接相通,就是求连通块的数量减一。求连通块的数量的方法有搜索,并查集。 以下代码用并查集的方法找连通块。 代码 # include <cstdio> using namespace std ; int father [ 1010 ] ; int getfather ( int x ) { if (

Python 快速解决图论问题 —— Dijkstra算法

做~自己de王妃 提交于 2020-01-15 21:14:46
Python 快速解决图论问题 —— Dijkstra算法 文章目录 Python 快速解决图论问题 —— Dijkstra算法 使用Dijkstra算法解决单源最短路径问题 1. 导入必要的包和转换数据成图 2. 有向图 3. 无向图 使用Dijkstra算法解决单源最短路径问题 1. 导入必要的包和转换数据成图 import networkx as nx import numpy as np import matplotlib . pyplot as plt inf = 1000 # the max number, it means there is no direct way edge = [ [ 0 , inf , 5 , 30 , inf , inf ] , [ 2 , 0 , inf , inf , 8 , inf ] , [ inf , 15 , 0 , inf , inf , 7 ] , [ inf , inf , inf , 0 , inf , inf ] , [ inf , inf , inf , 4 , 0 , inf ] , [ inf , inf , inf , 10 , 18 , 0 ] ] new_edge = np . array ( edge ) 2. 有向图 # 若G是有向图 G = nx . DiGraph ( ) # 建立一个有向图 l =

图论存图

瘦欲@ 提交于 2020-01-14 16:12:48
存图方式 今日份复习一下大概已知的存图方式: 矩阵存图: 很容易理解的一种存图方式,开一个矩阵,在其中假设一个数字(inf)为无穷大,,也就是不连通,那么不是这个数字的全是连通的,例如:a[i][j]=1;可以看成从点i到点j距离或者代价为1! 优点:容易理解,操作方便; 缺点:空间浪费率过高,不能表示很大的比如2e5的点! 点的大小在1000以内可以使用 前向星 没学过的点这个 优点:一个非常重要的存图方式,它通过链式的结构能够完整地把一张图存下来,能够表示2e5的数字点,同时空间利用率很高,能够快速查询一个点的所有直达点,能够利用前向星和优先队列对迪杰斯特拉算法进行优化操作 缺点:对于每一次单独查询两个点的查询速度过低,对于删除边操作有点麻烦(使用引用删边)。 唯一缺点:单独查边速度慢,删边的话也挺简单的。 vector建图 类似于前向星,从各个方面来说都想极了前向星存图 set建图 优点:可以快速删除边,便于查询不过我没怎么用过,其余我就不知道了。 来源: CSDN 作者: 为秃头而生 链接: https://blog.csdn.net/qq_42937891/article/details/103916077

图论基础

流过昼夜 提交于 2020-01-14 07:56:28
算法训练_图论基础知识 常用知识点 在无向图或者有向图中,顶点的度数总和为边数的两倍。 路径: 从顶点出发,经过一些顶点到达终点,顶点序列(顶点,…,终点) 路径长度: 路径中边的数量。 简单路径: 在路径中的顶点均不重复。 回路: 路径的顶点和终点是同一个点。 连通图: 无向图中,任意一对顶点间都是连通( 顶点u到顶点v之间有路径 )的。 有根树: 无向连通图中不存在回路,这时在图中指定图的一个顶点为树的根。 度序列 将图G中的顶点读书排成一个序列s,则称s为图G的度序列。 一个序列是可图的,是指这个序列是某个无向图的度序列。 eg: 4 3 2 2 1(可图) 2 1 1 0 0 0 0 若出现了负数,则直接认为该序列是不可图的。 邻接矩阵 每个顶点用一个一维数组储存边的信息,矩阵的大小为顶点的个数N, 在G1中顶点1的 出度 为第一行之和,为3 在G1中顶点3的 入度 为第一行之和,为2 邻接表 邻接表的优点:可以节省空间,可以重复记录边。 稀疏图: 顶点多,边很少 稠密图:顶点少,边很多 邻接表的实现: # include <iostream> # include <vector> using namespace std ; int main ( ) { vector < int > G [ 11 ] ; int m ; cin >> m ; for ( int i = 0