我太难了 $HDU$ 卡前向星 , $POJ$ 卡 $vector$ 我真的是服了 Description "link" 给定一棵树,要求支持如下操作: $1.$ 单点修改权值 $2.$ 查询经过某点的权值和最大的链 Solution 其实挺简单的吧,就是先一遍 $dfs$ 把树上的权值搞个前缀和 ...
分类:
其他好文 时间:
2020-04-08 10:02:41
阅读次数:
58
最小生成树两连 并查集优化的克鲁斯卡尔算法和优先队列+链式前向星优化的普利姆算法 Kruskal Kruskal是常用的最小生成树算法,算法利用贪心思想,每次选择没用过且不构成环的边的最小边,直到选择了n 1条边,通常我们用并查集这个数据结构去优化,优化后的Kruskal算法复杂度是$O(mlogm ...
分类:
其他好文 时间:
2020-04-07 12:27:31
阅读次数:
86
1 /* 2 //链式前向星维护的是一个边集数组 3 const int N = 1e6+5;//边的数目 4 int head[N];//某个点相邻的第一条边的编号 5 int cnt;//边的数目 6 struct Edge{ 7 int to;//这条边到达的终点 8 int dis;//这条 ...
分类:
其他好文 时间:
2020-03-27 12:28:19
阅读次数:
57
1 #include<bits/stdc++.h> 2 #define ll long long 3 #define scan(i) scanf("%d",&i) 4 #define scand(i) scanf("%lf",&i) 5 #define scanl(i) scanf("%lld",& ...
分类:
其他好文 时间:
2020-03-15 21:55:37
阅读次数:
58
前置芝士 1. "图的遍历" :通过DFS或者BFS遍历全图. 2. "前向星" :用来存边,但是在本题用也可以用一个二维数组解决. 具体做法 先从判断YES和NO开始,可以发现如果一个字母与三个及以上不同的字母相邻时肯定是不合法的,每个字母与左右的字母连一条边以后如果产生一个长度大于2的环也是不合 ...
分类:
其他好文 时间:
2020-02-13 13:09:26
阅读次数:
58
链式前向星总结 1. 结构 1. 结构体数组edge存边, 2. head[i]存以i为起点的第一条边(在edge中的下标)。 2. 增边 1. 若以点i为起点的边新增了一条,在edge中的下标为j。 2. 那么edge[j].next=head[i];然后head[i]=j。 3. 3. 遍历 4 ...
分类:
其他好文 时间:
2020-02-10 18:00:54
阅读次数:
83
图的存储方式 在说最短路之前,先介绍一下图的几个存储方式:主要有vector、邻接表和链式前向星三种存储方式。其中会牵扯到稀疏图和稠密图的概念, 稠密图指点的个数的平方和边的个数是一个数量级的($n^2 ≈ m$) , 两者数量级类似别称为稀疏图 。 G[maxn]; for(int i=1;i f ...
分类:
其他好文 时间:
2020-02-02 15:31:23
阅读次数:
74
1.0 Floyd(),简单粗暴,三重循环遍历,可求多源两点距离,但毕竟复杂度高,不适合过大的图。 2.0 Bellman(),借用一个(存放起点u、终点v、权值w的)结构体edge,遍历次数取决于边的个数*节点个数n,将复杂的三重循环,缩小到O(nm)的复杂度。 2.1 在Bellman()的基础 ...
分类:
其他好文 时间:
2020-02-01 21:14:27
阅读次数:
58
在极端情况下,图特别大,用邻接链表也会超空间限制,此时需要用到链式前向星来存图。 1 #include<bits/stdc++.h> 2 using namespace std; 3 4 const int inf = INT_MAX / 10; 5 const int num = ???; 6 s ...
分类:
其他好文 时间:
2020-01-30 22:54:25
阅读次数:
63
题意: 找出树上异或和最大的一条路径$p$ $$ _{xor}length(p)=\oplus_{e\in_p}w(e) $$ 01字典树。同样用到了简单的异或性质 $0\oplus a = a, a\oplus a = 0$ 定义$f(u,v)$为$u$到$v$的路径异或和。那么$f(u,v) = ...
分类:
其他好文 时间:
2020-01-22 20:12:45
阅读次数:
64