首页 > 生成树
头像 gyh20
发表于 2020-07-28 21:49:05
我用的是一个 hash+KMP 的做法。 首先,先把所有后缀的 hash 值记录下来,存入 map 中。 然后查询每一个前缀,求出 hash 值相同的后缀数量乘上长度的和即为答案。 但有些情况会算重复,比如 ababa 中 a 的答案在 aba 处被多算了,aba 的答案在 ababa 的地方被多算 展开全文
头像 小嗷犬
发表于 2023-08-18 23:12:01
考察知识点:生成树 本题其实不用建树,对比两棵树的差异即可,当生成树 a 有而生成树 b 没有的边的数量不等于生成树 a 没有而生成树 b 有的边的数量时输出 -1(事实上,可以证明对于两棵节点相同的生成树,这两个值一定相等),否则输出相差边数之和的一半。 时间复杂度: #include <b 展开全文
头像 gyh20
发表于 2020-07-28 21:35:15
由于要求边完全相同,所以在 A 中存在的边但 B 中不存在的一定会被删掉,其它边保留,连边就连 B 中剩下没连的。 所以,只用统计 A 中出现过的但 B 中没有出现过的边,对于一条边 ,如果 交换 ,然后查询数对是否出现过即可。 用一个 map 维护。 #include<bits/stdc+ 展开全文
头像 肖先生~
发表于 2020-07-31 14:02:51
思维题 刚刚开始拿到这个题目的时候感觉应该会很麻烦,并且一开始的思路就是错的,想到了去建一个最小生成树,那么后序该怎么比较呢,就感觉很烦,后序看了大佬的题解,原来这是一个思维题,首先我们对n-1条边进行赋值操作就让它指向一个对应的值,然后在对后序n-1条边进行判断,题目根本不需要我们建图只需要我们去 展开全文
头像 yaoking
发表于 2020-07-28 21:34:32
**bfs加优先队列 优先队列自动从小到大 这样找到出口,自然是最小值** #pragma GCC optimze(2); #include"bits/stdc++.h" using namespace std; int n,m; int a[50][50]; int visit[50][50]; 展开全文
头像 东溪看水
发表于 2020-07-30 14:42:45
题目 有一张 个点的完全图(即任意两点之间都有无向边)现在给出这张图的两棵生成树定义一次操作为:在任意一棵生成树中删除一条边后再加入一条边(必须在同一棵树中操作),同时需要保证操作完后仍然是一棵树。问使得两棵树相同的最少操作次数,若不存在合法的操作方案,输出-1 注意:这里的相同指的是点集与边集均 展开全文

等你来战

查看全部