摘要: lower_bound()和upper_bound()都是利用二分查找的方法在一个排好序的数组中进行查找的。需要引入头文件:algorithm。 1)在从小到大的排序数组中 lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的 阅读全文
posted @ 2021-03-02 23:06 Dazzling! 阅读(52) 评论(0) 推荐(0) 编辑
摘要: 有向图判环。 拓扑排序 判断拓扑排序的结果是否包含$n$个点。 const int N=110; vector<int> g[N]; int din[N]; int n,m; bool topo() { queue<int> q; for(int i=0;i<n;i++) if(din[i] == 阅读全文
posted @ 2021-03-02 17:57 Dazzling! 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 拓扑排序水题~。 const int N=510; vector<int> g[N]; vector<int> ans; int din[N]; int n,m; void topo() { priority_queue<int,vector<int>,greater<int>> q; for(in 阅读全文
posted @ 2021-03-02 16:59 Dazzling! 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 拓扑排序 如果一个有向图的任意顶点都无法通过一些有向边回到自身,那么称这个有向图为有向无环图(Directed Acyclic Graph, DAG)。 拓扑排序是将有向无环图G的所有顶点排成一个线性序列,使得对图G中的任意两个顶点u、v,如果存在边u->v,那么在序列中u一定在v前面。这个序列又被 阅读全文
posted @ 2021-03-02 16:39 Dazzling! 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 题意 给定n个点和n*(n-1)/2条边的无向图,求图的最小生成树,其中有些边已经确定(可能是最小生成树的一部分,也可能不是)。 思路 由于已经确定了部分边,在读入数据过程中,如果这条边已经被确定,那我们就用并查集将两点合并;如果这条边还未确定,那么我们将它放进边集数组等待Kruskal算法进行从小 阅读全文
posted @ 2021-03-02 16:34 Dazzling! 阅读(18) 评论(0) 推荐(0) 编辑
摘要: $MST$裸题。 struct Node { int a,b,c; bool operator<(const Node &W) const { return c < W.c; } }e[80]; int p[30]; int n,m; int find(int x) { if(x != p[x]) 阅读全文
posted @ 2021-03-02 16:07 Dazzling! 阅读(37) 评论(0) 推荐(0) 编辑
摘要: 这是真的水,就是写起来烦(摊手)。 题意 给定一个图、一个起点和一个终点,求一条距离最短的路径,如果有多条距离最短的路径,从中选择时间最短的一条,数据保证唯一性;再求一条时间最少的路径,如果有多条时间最少的路径,从中选择路径上顶点个数最少的一条,数据保证唯一性。如果距离最短和时间最少的是同一条路径, 阅读全文
posted @ 2021-03-02 13:16 Dazzling! 阅读(83) 评论(0) 推荐(0) 编辑
摘要: 水~。 题意 给定一个无向图和一.堆路径,判断每一条路径是否是这个无向图的哈密顿回路。所谓哈密顿回路是指首尾结点相同、经过且恰好经过图上所有结点各一次的路径。 思路 根据哈密顿回路的定义,一条路径是哈密顿回路需要满足3个条件: (1)首尾结点相同。 (2)路径的每条边必须都存在。 (3)不考虑首结点 阅读全文
posted @ 2021-03-02 11:45 Dazzling! 阅读(44) 评论(0) 推荐(0) 编辑