
图论
鸣蜩二九~
一岁有一岁的味道,一站有一站的风景。
花会沿路盛开,以后的路也是。
展开
-
Codeforces Round #692 (Div. 2)C. Peaceful Rooks(并查集求环数)
题目传送题意:给你一个n*n的矩阵,m个车,中几个车可以在每次可以在x轴上或者y轴走任意的长度。但是得保证一行或者一列中只能有一个车。现在问最少多少次把所有的车都移到主对角线上。思路:假如一个点(x,y)能直接移动到(x,x)或者(y,y)上的话,那么就直接移动,那么就只需要一次,但是如果不能移动的话(也就是说有其他棋子在那一行或者那一列中)那么这个点必须让一步,也就是多退一步,只要一个点让一步,那么其他点都可以一次性到达一个对角线上的点,然后退的这个点,又只需要只用一步就可以到达一个对角线上。退一原创 2020-12-21 22:21:38 · 539 阅读 · 0 评论 -
AtCoder Beginner Contest 177 D - Friends(并查集求最大环或链的长度)
题目传送题意:给你N个人,这n个人,有些人是朋友,有些人不是朋友(如果1和2是朋友,2和3是朋友,那么1和3也是朋友),现在问,你最少分多少组,使得每一组中的每一个人都不是朋友思路:其实就是求最长的环,或者一条链的最长长度,那么这几个人是肯定不能在一起的,所以这就是最少的分组,用并查集求出即可AC代码#include <bits/stdc++.h>inline int read(){char c = getchar();int x = 0,s = 1;while(c < '原创 2020-08-29 22:22:49 · 312 阅读 · 0 评论 -
01bfs
题目传送题意:一张 n * m 的地图,上面有空地和墙。给定起点和终点,你可以往上下左右相邻的结点走,但是只能走空地,你也可以用魔法跳到以当前点为中心,5 * 5的范围内的任意空地。要求出走到终点使用魔法的最少次数。思路:我最开始的思路是并查集求连通块(块是一个相互连通的方格区,因为这一块的步数一定是一样的),然后判断从起点块到终点块的最小值,我觉得是没有问题,应该是哪里写错了,导致wa了。后来了解到,这个是典型的01bfs我理解的01bfs是,在最短路中,花费的代价为0和1的时候,要求代价最少原创 2020-08-29 20:15:52 · 1785 阅读 · 0 评论 -
2020牛客暑期多校训练营(第八场) I.Interesting Computer Game(并查集求连通块以及判环)
题目传送题意:一个游戏有N个回合,每回合提供两个整数ai和bi,每回合只能选以下三个操作之一。不做任何操作。如果ai没被选过(指ai的数值),可以选择ai。如果bi没被选过,可以选择bi。先给出所有a1,a2,…,an与b1,b2,…,bn,求出选择的最多整数数量。思路:我们把每一回合的俩个数连成一条边,那么现在这些边与边互通,我们用并查集记录他现在的根,不断更新,然后求出来,最后有几个连通块,以及在这些连通块中,有几个是环,如果一个连通块是环,那么这里面的数全部都可以选(可以自己画画图来验原创 2020-08-04 22:25:00 · 161 阅读 · 0 评论 -
swust oj 有向图的邻接矩阵存储根计算 (floyd算法变形)
题目链接题目:代码#include <bits/stdc++.h>inline int read(){char c = getchar();int x = 0,s = 1;while(c < '0' || c > '9') {if(c == '-') s = -1;c = getchar();}while(c >= '0' && c <= '9') {x = x*10 + c -'0';c = getchar();}return x*s;}原创 2020-05-24 11:36:02 · 350 阅读 · 0 评论 -
洛谷- P1983 车站分级 (拓扑思想)
题目传送题意:思路:由题意可知,起点和终点之间的没有停的站台点一定是比停了的站台点的级数低,所以这里就有一个大小关系,我们可以把没有停的站台点到已经停了的站台点之间连一条边。然后最后利用拓扑的思想来判断最多有几级。AC代码#include <bits/stdc++.h>inline long long read(){char c = getchar();long long x = 0,s = 1;while(c < '0' || c > '9') {if(c ==原创 2020-07-06 13:57:14 · 218 阅读 · 0 评论 -
Bellman-Ford 求最长路
洛谷 - P1807题目传送题意:思路:只有DAG(有向无环图)才有最长路最长路其实思想和最短路的思想是一样的,如果没有负权值,那么我们完全可以用dijkstar解决(在枚举当前最短路径的时候,直接枚举最长路径即可)。但是很不幸,这个题有负权值,那么dij解决不了,如果用floyd的话,看到数据为 1 <= n <= 1500,看到会t掉。所以这里用另外一种方法解决,他就是 Bellman-Ford (时间复杂度为(n*m),也就是点的数量乘边的数量,求单源路径)算法原理:才原创 2020-07-03 21:55:11 · 1144 阅读 · 0 评论 -
洛谷 - P5836 [USACO19DEC]Milk Visits S (并查集+连通块或者LCA)
题目传送题意:思路:1.那么他给定了n个点,n-1条边的无向图,又说了这个图是相互连通的,那么一个点到另外一个点的路径是唯一的。2.既然路径是唯一的,那么我们就看路径的性质,如果这条路径上面又有G又有H,那么无论谁走这条路都会高兴的。而如果这条路上只有H或者G,那么当喜欢另一种口味的人,走这条路就会不高兴3.所以找出其特性:给定俩个点,路径唯一,只有当这条路的字符一样的时候,才有可能使客人不高兴,而字符一样,那不就是具有相同的性质吗?用并查集将字符一样的边连通,后面再判断就是。LCA我还不会原创 2020-06-30 18:00:34 · 360 阅读 · 0 评论