- 博客(15)
- 收藏
- 关注
原创 【luogu UVA12983】【ybtoj】【树状数组课堂过关】【DP】【例题3】严格上升子序列数&The Battle of Chibi
设f[i][j]为以i为结尾,长度为j的严格上升子序列的个数,转移方程为f[i][j]=sum(f[k][j-1])【k<i,s[k]<s[i]】,但是这样为TLE,所以用树状数组代替k(记得离散化)
2021-05-27 17:00:27 284
原创 【luoguP1908】【ybtoj】【树状数组】【离散化】【例题2】逆序对
先用离散化求出序列中的数的大小关系,再将大小排名作为新的编号,往树状数组上加,最后用当前序列长度 - 当前顺序对数量就求出逆序对了
2021-05-22 10:04:54 165
原创 【ybtoj】【强连通分块】【Tarjan】【例题2】受欢迎的牛
先Tarjan,把牛进行捆绑; 明星的的条件:1. 在出度为0的强连通分块中;2. 出度为0的强连通分块只有一个
2021-05-06 17:31:56 201
原创 【ybtoj】【强连通分块】【Tarjan】【DP】【例题1】有向图缩点
设dis[i]为以i为终点的最大值,s[i]为i点的点权值,设有一条边是i->j; dis[j] = max(dis[j], dis[i]+s[j]); 优化:Tarjan -》取消了环的无用性, 一个强连通分块的值是固定的,先用Tarjan求出来,再用缩出来点进行DP
2021-05-06 17:22:09 225
原创 【ybtoj】【最小生成树】【例题3】公路建设
这题的数据是蛮水的,好像暴力最小生成树就可以过去; 每输入两个点之间的新边,将旧边替换成新边,冒泡排序(插排也星)。 再做最小生成树,复杂度O(m^2); 我们考虑加入这条边对先前求出的生成树的影响,发现要么这条边插入生成树,并踢出原先生成树中的一条边,要么树没变,还是之前那棵树,没在最小生成树上的边在之后不会成为最小生成树上的边,将这些边全部忽略掉。每次kraskal复杂度变为O(n),总复杂度仅O(nm)
2021-05-04 14:43:15 202
原创 【ybtoj】【最小生成树】【例题2】新的开始
很经典的模板题 设一个超级起点,所有点建发电站,视为是所有点向超级起点连边 再做最小生成树就ok了
2021-05-04 07:57:57 187
原创 【ybtoj】【并查集】【例题3】银河英雄传说
设num[i]为 i为头的队伍有多少个点(就是代表一个集合里有多少点,因为i打头,所以i就为i集合的标记); 设dis[i]为 i到fa[i](即i的父节点)有多少士兵; 并查集时,需维护dis[], 这就是带边权并查集————————吧
2021-05-03 21:16:43 163
原创 【ybtoj】【并查集】【例题2】程序自动分析
【例题2】程序自动分析Link解题思路Code Link 传送门 题目 解题思路 这题**的要离散化 虽然不是很难,但是有必要在这么模板的题上加个离散化吗,有!必!要!吗! 将 ‘等于’ 和 ‘不等于’ 分开处理 先处理‘等于’,做并查集 再处理‘不等于’,如果‘不等于’的两个点出现在同个集里,说明两个点既 ‘等于’ 又 ‘不等于’,出现不满足 Code #include <algorithm> #include <iostream> #include <cstdio&g
2021-05-03 20:54:30 104
原创 【ybtoj】【并查集】【例题1】【模板】并查集
【例题1】【模板】并查集Link解题思路Code Link 传送门 题目 解题思路 真真就是个并查集模板 Code #include <iostream> #include <cstdio> using namespace std; int n, m, fa[10010], c, x, y, xx, yy; int find(int x) { if(fa[x] != x) { fa[x] = find(fa[x]); return fa[x]; } retu
2021-05-03 19:04:11 148
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人