图
_Rikka_
- v -
展开
-
蓝桥杯国赛——路径(最短路)
思路很明显的最短路,建完图后,直接跑dijkstra即可,细节见代码。答案:10266837Code#include<iostream>#include<queue>#include<memory.h>using namespace std;typedef long long ll;const int Max = 1e6 + 5;int u[Max], v[Max], w[Max];int g = 0, first[Max], nex[Max].原创 2021-06-03 23:20:55 · 1862 阅读 · 2 评论 -
kruskal板子
#include<iostream>#include<algorithm>using namespace std;typedef long long ll;const int Max = 1e6 + 5;struct node{ int u, v, w; node(int a=0, int b=0, int c=0) { u = a, v = b, w = c; } bool operator <(node& a) { return w原创 2021-04-27 18:51:59 · 1732 阅读 · 0 评论 -
dijkstra板子
#include<iostream>#include<queue>#include<memory.h>using namespace std;typedef long long ll;const int Max = 1e6 + 5;struct node{ int n, v;//n结点编号 v到节点的距离 node(int a, int b) { n = a, v = b; } bool operator <( const node&am原创 2021-04-27 18:34:00 · 146 阅读 · 0 评论 -
蓝桥杯 分考场(图染色问题)
问题描述n个人参加某项特殊考试。 为了公平,要求任何两个认识的人不能分在同一个考场。 求是少需要分几个考场才能满足条件。输入格式第一行,一个整数n(1<n<100),表示参加考试的人数。 第二行,一个整数m,表示接下来有m行数据 以下m行每行的格式为:两个整数a,b,用空格分开 (1<=a,b<=n) 表示第a个人与第b个人认识。输出格式一行一个整数,表示最少分几个考场。思路DFS暴力回溯+剪枝。大体思路是假设当前已经有n个考场,考场中已经放入了num原创 2021-04-17 23:04:03 · 253 阅读 · 0 评论 -
D - AB Graph (构造、图)
题目思路:分为两种情况:1.当m为奇数时,直接12121212…构造出的一定是回文。2.当m为偶数时,可以知道n>=3时一定可以构造出。证明如下:当1,2,3三个点中出现来回字母一样,只需两个点不断循环即可。当无上述情况,来回必然是a,b交叉,因此我们一定可以找到如下的图。其实就是有连续两个a,1->2->3->1,或2->3->1->2,或3->1->2->3,这几种情况aab,aaa,aba…因为是循环的一定可以找出两个连续的a构成原创 2021-02-08 17:20:45 · 336 阅读 · 0 评论 -
1475E - Advertising Agency(dfs、dp)
题目思路:对于一个结点有四种情况00 11 10 01,其中00 11我们不需要重新交换。然后因为每个子树都可用其父亲及往上的结点的值交换。故我们从上到下更新每一个结点的交换值,其值为min(自己,父亲)。然后从1开始dfs,先深入到最底下结点,让下面的结点先进行交换(因为越往下的结点花费越少),还剩下的没交换的给其父节点,一层层往上,如果最终都还剩下没交换好的,则不可能全交换。Code:#include<iostream>#include<vector>#defi原创 2021-01-26 15:18:45 · 294 阅读 · 1 评论 -
1263 - D. Secret Passwords (并查集)
题目思路:从答案上来看我们可以知道密码数最多只有26种即26个字母,然后根据可以等效的的密码(即直接或间接拥有相同的字母),我们让可以等效的密码放在一个集合里(对每个密码让每一个字母与第一个字母连边构成一个连通图(并查集)),然后最后的集合数即为答案。Code:#include<iostream>#include<string>#include<map>#include<algorithm>#include<memory.h>#in原创 2021-01-16 20:36:45 · 211 阅读 · 0 评论 -
1303 C Perfect Keyboard (DFS)
题目思路:这是一道图论题,通过观察我们可以发现如果一个字母旁边出现过三种及以上的其他字母则无解,并且出现环时也无解如:ABCA因为如果有一个环,那必然有两条边,而这个环想要跳到下一个字母必然还需要一条边.其实正确的答案就是链和一些孤立的点了。那么我们就可以把相邻的两个字母连线,统计度数,DFS遍历一遍度数<2的点,链从度为1开始及度为0的孤立点。最后再判断是否有点没被访问到,当出现环时(因为不dfs度为2的点)会出现有点没被访问,细节见代码。Code:#include<iostream&g原创 2021-01-16 15:09:26 · 315 阅读 · 1 评论