<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wodasini的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wodasini</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wodasini]]></copyright><item><title><![CDATA[2020牛客暑期多校训练营（第三场）]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/108310751</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/108310751</guid><author>wodasini</author><pubDate>Mon, 31 Aug 2020 00:21:48 +0800</pubDate><description><![CDATA[2020牛客暑期多校训练营（第三场）
A.Clam and Fish
显然有鱼钓鱼，没鱼有饵钓鱼，没鱼没饵做饵
B.Classical String Problem
问：给定若干操作，每次把string循环右移/左移x位。问第y位是什么
取模就行。。。。一开始纯nt，写了splay，T了
C.Operation Love
有几条边长是整数，可以唯一确定左下角的坐标，然后通过叉积来判断这个向量是大于0还是小于0来判断左手还是右手。
D.Points Construction Problem
显然：一个单独点+]]></description><category></category></item><item><title><![CDATA[2020 牛客多校第一场]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/108221152</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/108221152</guid><author>wodasini</author><pubDate>Tue, 25 Aug 2020 18:21:23 +0800</pubDate><description><![CDATA[A. B-Suffix Array
后缀数组的思想：倍增+桶排序的方式找出一串连续序列后缀的大小。虽说正常使用的时候都是字典序，但是只要修改排序方式，也能够达到一个类似的"后缀数组“效果。
当然直接修改排序方式可能比较麻烦（都是抄板子），那么不如就对应排序方式修改下原数组的值做个变换就行。
题目解法来自论文，。。猜的对就能做
B. Infinite Tree
虚树的应用：
显然点太多不可能全部找出来，只有lca能来点作用
问题就是怎么找lca,
使用一个树状数组维护各个因数个数
由于树的转移都是找的最小因数]]></description><category></category></item><item><title><![CDATA[2020 HDU 杭电多校第六场]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/107852964</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/107852964</guid><author>wodasini</author><pubDate>Fri, 07 Aug 2020 00:23:58 +0800</pubDate><description><![CDATA[2020 HDU 杭电多校第场六场

Little Rabbit’s Equation
Divisibility
A Very Easy Graph Problem
Road To The 3rd Building
Expectation
Fragrant numbers



Little Rabbit’s Equation
  
 题目大意：
 给一串数字符号表达式,形如"A1+30=B5"
 判断这个最少是几进制的， 
由于数据很小，直接模拟，注意每个数字必须严格小于进制数
#include &lt;]]></description><category></category></item><item><title><![CDATA[【带权值并查集】 hdu 3038 How Many Answers Are Wrong?]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/83351962</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/83351962</guid><author>wodasini</author><pubDate>Wed, 24 Oct 2018 22:30:16 +0800</pubDate><description><![CDATA[题目大意：

假设你有一组数列：

给出一系列三元组(l,r,val) 表示[l,r]的区间和为val

不断地给出这样的三元组，有时候三元组会有不可能地情况出现。

问有多少个错误的情况出现：


其实自己想，很难想到这个题目居然是道并查集

额外维护一个数组sum[x] 表示从头节点fx-&amp;gt;x 的区间和

1.如果询问(x,y,val)是，xy在同一个集合里，那么就可以判断sum(x)-...]]></description><category></category></item><item><title><![CDATA[【并查集】 映射拆点 uva 11987  Almost Union-Find]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/83351690</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/83351690</guid><author>wodasini</author><pubDate>Wed, 24 Oct 2018 22:13:48 +0800</pubDate><description><![CDATA[题意：

维护一个数据结构，能够支持三种操作：

1、将p,q元素并入一个集合中

2、求出p元素所在集合元素个数、元素之和

3、把元素p从原集合移动到元素q所在集合

 

显然是一道并查集的题目，需要额外维护的数据是size[]和sum[],这都是很容易实现的。

问题在于如何进行第三个操作

1、如果只是纯粹朴素的移动，一旦p是个父节点，会使得把p的所有子节点也给带走，所以这么做法行不通
...]]></description><category></category></item><item><title><![CDATA[【最短路径树优化】 uva 1416 Warface And Logistics]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/82902150</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/82902150</guid><author>wodasini</author><pubDate>Sat, 29 Sep 2018 20:09:27 +0800</pubDate><description><![CDATA[题目大意：

给出一张无向图，求删除一条边后，对于所有的点对(i,j）使得 c = Sum(d[i][j)]最大的值。

 

分析：

如果仅仅是枚举删除某一条边，是非常差的做法，我们要得到以下几点信息：

首先我们要明确，如果删除这么一条边——不在任何一条最短路径a-&amp;gt;b上的边，那么显然c的值不会受到任何的改变。因此我们需要尝试枚举删除的边，都应该在某条最短路上。

 

在求初始c的时...]]></description><category></category></item><item><title><![CDATA[【带有估值函数的DP】 uva 10859 Placing Lampposts]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/82901957</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/82901957</guid><author>wodasini</author><pubDate>Sat, 29 Sep 2018 19:56:47 +0800</pubDate><description><![CDATA[题目大意：给一颗无向图树，每个节点都可以放灯，灯能点亮相邻的边，求怎么样才能把所有边都点亮。

如果有多种方案：给出一个能够让有两盏灯同时找到路情况最多的方案。

 

解析：

如果去掉后面的条件，就成为了一个很简单的树上dp。如何处理同时两盏灯找到的情况呢？

通常情况下：我们会将无根树变为有根树，建立一个dp[i][j] ，表示遍历为所有i及其子节点后，情况为j(0/1,放/不放）时的方案总...]]></description><category></category></item><item><title><![CDATA[【tarjan(scc)+缩点】 hdu 2767 Proving Equivalences]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/82901847</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/82901847</guid><author>wodasini</author><pubDate>Sat, 29 Sep 2018 19:34:31 +0800</pubDate><description><![CDATA[题目大意：有n个命题，和一些于a-&amp;gt;b的推导式子，问还需要几个证明能保证这些命题等价。

 

思路：

       连通分量里的点自然是已经互相等价了。我们可以缩点，然后判断还需要加多少遍是的后来的点图成为一个强连通分量。

与找scc个数不同的是，如果某两个scc之间存在着边，那么后来新图中的点上这两边也存在。而且可以确定的是，这些边必然是从某个scc到另一个scc点，因为一旦是双向边...]]></description><category></category></item><item><title><![CDATA[【dijkstra变形】 uva 11367 Full tank?]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/82901632</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/82901632</guid><author>wodasini</author><pubDate>Sat, 29 Sep 2018 19:05:13 +0800</pubDate><description><![CDATA[题目大意： 在一张无向图中，你的车要从起点走到终点。你走多少距离要耗费多少油。每个地方加油的钱不一样，你可以不加，加一个单位，加满。。。。油量箱是有上限的。 一开始你的车油容量为空。 求到终点最便宜花多少钱。

节点：n &amp;lt;= 1000  

油容量 c &amp;lt;= 100

询问次数 q &amp;lt;= 100

 

思路一：第一眼见到的是拆点，把三元组(u,cost,oil)分别连边，可惜...]]></description><category></category></item><item><title><![CDATA[【缩点+tarjan(scc)】 uva 11324]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/82901570</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/82901570</guid><author>wodasini</author><pubDate>Sat, 29 Sep 2018 18:57:30 +0800</pubDate><description><![CDATA[题目大意：

在一张有向图中，我们把有这样性质的点的集合S称之为Clique（派系？)

对于任意在S中的两个点x,y   存在x-&amp;gt;y的路径或（包含）存在y-&amp;gt;x的路径

 

思路：首先要明白，如果存在强连通分量，那么在这个强连通分量里的所有点他们都是一样的，有你的肉就少不了我一杯羹。因此我们事实上可以把一个强连通分量缩成一个点，点权为scc的大小。

然后我们又重新的到了一张无环...]]></description><category></category></item><item><title><![CDATA[【二分+bellmanford判负环】 uva 11090 Going in Cycle!!!]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/82901484</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/82901484</guid><author>wodasini</author><pubDate>Sat, 29 Sep 2018 18:45:18 +0800</pubDate><description><![CDATA[题目大意：给出一张有向图，求出平均值最小的环

 

思路一：第一种算法就是dfs找环，每找到一个环，求出其平均值。然而别看n&amp;lt;50,想造出这样的数据也是分分钟的事情。

 

思路二：bellmanford算法就是为带权的图而生的。bellmanford的更新条件比较苛刻，不像dfs那么随意地找。

              对于平均值最小，xx值最x，我们通常使用二分的方法，假设这个最...]]></description><category></category></item><item><title><![CDATA[【图的再构造】 uva 10917]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/82901389</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/82901389</guid><author>wodasini</author><pubDate>Sat, 29 Sep 2018 18:33:39 +0800</pubDate><description><![CDATA[题目大意：一张无向图上面有Jimmy的家和Jimmy的公司。

Jimmy必须要走满足一下条件的路：如果Jimmy要从A走到B，必须存在一条以B为起点的路径，比从任何一条以A为起点的路径短。

 

思路：所谓的“必须存在一条以B为起点的路径，比从任何一条以A为起点的路径短。” 也就是说，从A开始的最短路径比从B开始的最短路径短。 因此跑完一边最短路径后，我们对所有d[x] &amp;gt; d[y]的点...]]></description><category></category></item><item><title><![CDATA[【滑动窗口】uva 1330 City Game]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/82901305</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/82901305</guid><author>wodasini</author><pubDate>Sat, 29 Sep 2018 18:26:05 +0800</pubDate><description><![CDATA[题意：有一个矩阵，上面有F和R，求最大由F组成的子矩阵的大小

N &amp;lt;= 1000

 

思路一：DP，4维，不可不可。

 

思路二：“二维滑动窗口”。自底向上，自左向右扫描，让len(i,j)表示往下到底F最长的长度，left(i,j),right(i,j)表示从右到左同样是len(i,j)能够扩展到多远。 有这样的状态转移：

len(i,j) = len(i-1,j) + 1。 ...]]></description><category></category></item><item><title><![CDATA[【动态规划】 EOJ  3338 双塔问题]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/80173365</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/80173365</guid><author>wodasini</author><pubDate>Wed, 02 May 2018 23:00:36 +0800</pubDate><description><![CDATA[          Time limit per test: 1.0 seconds      Memory limit: 256 megabytes                            Alice 和 Bob 在玩积木游戏。他们找到了 n 块积木，这些积木都是正方体，棱长分别为 a1,a2,…,an。现在 Alice 和 Bob 要用这些积木垒两座高塔。他们想要这两座高塔的高度...]]></description><category></category></item><item><title><![CDATA[【数学】 一些的数学题]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/80139548</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/80139548</guid><author>wodasini</author><pubDate>Sat, 28 Apr 2018 22:03:15 +0800</pubDate><description><![CDATA[Uva 11401 Counting triangles大意： 给一个n，问从边长为1,2,3...........n 中能够组成几个三角形。分析：1.n&amp;lt;=3 肯定不行          2.换个思路，令f(x)表示从1.....x中必须取x能够组成三角形的个数, s(x) 表示所有情况。易得s(x) = s(x-1) + f(x)。因此我们接下来只要考虑f(x)怎么求即可。       ...]]></description><category></category></item><item><title><![CDATA[【poj 2352】 Stars 及浅谈树状数组]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/79945119</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/79945119</guid><author>wodasini</author><pubDate>Sat, 14 Apr 2018 22:43:27 +0800</pubDate><description><![CDATA[树状数组：       1、 一个可以动态维护前缀和的一个数据结构，支持求和和单点修改。在拓展情况下可以支持区间修改。       2、 优点：代码短，O(lgn)的开销lowbit是非常有用的 x&amp;amp;(-x) 利用补码的性质得出最低位的数字。核心代码：inline int lowbit(int x){ return x&amp;amp;(-x);}
void add(int x,int val)
...]]></description><category></category></item><item><title><![CDATA[【ZOJ 2112】 线段树套平衡树]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/79937127</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/79937127</guid><author>wodasini</author><pubDate>Sat, 14 Apr 2018 09:57:38 +0800</pubDate><description><![CDATA[题目大意： 给定一个数列，定义两种操作：1、修改第n个数的值2、求[l,r]区间内第k大的值。方法：线段树维护区间，treap树维护第k大（splay当然也可以）树套树第一题。。没想到真的是每个线段树上的节点建一棵平衡树。。。。。然后修改值就是在所有相关区间内的平衡树里，erase一个值再insert一个值。。。。简直恐怖查询就是二分答案，因为每个区间都有一棵树，所以可以很快就可以在O(lgn）里...]]></description><category></category></item><item><title><![CDATA[【POJ 2985】 The k-th Largest Group   Treap+并查集]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/79935367</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/79935367</guid><author>wodasini</author><pubDate>Fri, 13 Apr 2018 22:36:08 +0800</pubDate><description><![CDATA[Treap：佛系平衡树，爱转不转，靠随机，靠随缘，只有单旋转。比普通的二叉树多一个priority值，保存结点的权重用随机数生成。如果一个节点的儿子比他的父亲优先级大【或小】，就执行一次单选转。期望平均O(nlgn) 可以说是很随缘了。删除稍微复杂一点：1、叶子节点，直接消失。2、没有左儿子/右儿子，把该节点反复执行相应旋转，转到情况1，直接删除。3、朝优先级低的那方向转。模板const int ...]]></description><category></category></item><item><title><![CDATA[【指针1】 指针减法   数组索引与数组指针  指针的强制转换]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/79893464</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/79893464</guid><author>wodasini</author><pubDate>Wed, 11 Apr 2018 12:09:04 +0800</pubDate><description><![CDATA[一、同类型指针可以做减法：比如：#include &amp;lt;iostream&amp;gt;
using namespace std;
int arr[1230];
int main() {
	int *a = &amp;amp;arr[4];
	int *b = (arr + 1);
	int c = a - b;
	cout &amp;lt;&amp;lt; c &amp;lt;&amp;lt; endl; // c 的值为 4-1 = 3
...]]></description><category></category></item><item><title><![CDATA[【ECNU OJ 2918】k-th number 可持久化线段树 + 离散化]]></title><link>https://blog.youkuaiyun.com/wodasini/article/details/79890659</link><guid>https://blog.youkuaiyun.com/wodasini/article/details/79890659</guid><author>wodasini</author><pubDate>Wed, 11 Apr 2018 10:33:43 +0800</pubDate><description><![CDATA[什么叫可持久化线段树？我看到非常一个犀利的解释：“线段树是让你在区间内进行修改以及询问的一个数据结构，但可持久化线段树就是想考考你，询问第x个版本的线段树的结果” 先要明白我们不可能真的取造n个线段树，必然是分分钟TLEMLE。 而是要在原来的线段树上进行操作，才能达到目标。 说实话，其实构建方法很简单巧妙。1、 首先要明确的一点是：由于可持久化线段树保存历史版本，不能像原先一样利用二进制的特点，...]]></description><category></category></item></channel></rss>