<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Bahuia的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Bahuia</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Bahuia]]></copyright><item><title><![CDATA[Stanford-parser依存句法关系解释]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78390341</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78390341</guid><author>Bahuia</author><pubDate>Mon, 30 Oct 2017 10:01:05 +0800</pubDate><description><![CDATA[文章转自：http://blog.youkuaiyun.com/lihaitao000/article/details/51812618计算机语言学家罗宾森总结了依存语法的四条定理：
一个句子中存在一个成分称之为根（root），这个成分不依赖于其它成分；
其它成分直接依存于某一成分；
任何一个成分都不能依存与两个或两个以上的成分；
如果A成分直接依存于B成分，而C成分在句中位于A和B之间，那么C或者直接依存于B]]></description><category></category></item><item><title><![CDATA[HDU 4421 2-SAT]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78227165</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78227165</guid><author>Bahuia</author><pubDate>Fri, 13 Oct 2017 16:04:59 +0800</pubDate><description><![CDATA[题意：题目链接：http://acm.split.hdu.edu.cn/showproblem.php?pid=4421 
按照题目所示的转移方式，问是否存在一个a数组可以转译成b矩阵。思路：因为都是位运算，b[x][y]只会由两个bool变量影响，其实只要将每个数字按位拆开来进行2-SAT即可。#include <bits/stdc++.h>
using namespace std;
const]]></description><category></category></item><item><title><![CDATA[Gym 101201B dp]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78227047</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78227047</guid><author>Bahuia</author><pubDate>Fri, 13 Oct 2017 15:59:09 +0800</pubDate><description><![CDATA[题意：题目链接：http://codeforces.com/gym/101201/attachments 
给出一个迷宫，以及一串上下左右的指令，机器人需要按照指令前进，问最少添加以及删除多少指令可以令机器人顺利从起点走到终点。如果机器人顺着指令遇到障碍或者边界，那么自动忽略这条指令留在原地。思路：好题。 
dp[i][x][y]表示在前i个指令完成之后，机器人处于(x,y)的最少增加删除代价。]]></description><category></category></item><item><title><![CDATA[Gym 101201F 2-SAT]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78226839</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78226839</guid><author>Bahuia</author><pubDate>Fri, 13 Oct 2017 15:44:18 +0800</pubDate><description><![CDATA[题意：题目链接：http://codeforces.com/gym/101201/attachments 
给出一个方格，其中若干点上有灯，每盏灯可以选择在一行或者一列照亮以自己为中心长度为2*r+1的区间，但是要让同一行之间以及同一列之间的灯不能有照亮的重叠区域，问是否可行。思路：每盏灯有两种选择，2-SAT裸题。代码：#include <bits/stdc++.h>
using namespac]]></description><category></category></item><item><title><![CDATA[HDU 5361 最短路+并查集优化]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78204240</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78204240</guid><author>Bahuia</author><pubDate>Wed, 11 Oct 2017 15:29:14 +0800</pubDate><description><![CDATA[题意：题目链接：http://acm.split.hdu.edu.cn/showproblem.php?pid=5361 
有n个点，每个点有一个可以到达点的范围[l,r]，传送一次距离为c，问从点1到所有点的最短距离是多少。思路：注意到从点1开始，如果利用优先队列选出将要到达的最近的点，那么每个点最多只需要更新一次，如果用传统的最短路，会浪费大量的时间在扫描那些已经更新过的点上，因此需要利用并查集]]></description><category></category></item><item><title><![CDATA[UVA 11987 并查集（虚拟节点）]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78195163</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78195163</guid><author>Bahuia</author><pubDate>Tue, 10 Oct 2017 17:27:46 +0800</pubDate><description><![CDATA[题意：题目链接：https://vjudge.net/problem/UVA-11987 
对集合三种操作，一种合并，一种求集合元素个数和总和，另一种是将其中一个集合的元素移动到另一个集合，输出询问个数和总和。思路：并查集，主要是转移这个操作，如果单纯将pa[x]=Find(y)，那么以x为祖先的结点都会被转移，因此这里需要为每个集合设置虚拟节点，所有集合的根一定都是虚拟节点，所有操作也都针对虚拟节]]></description><category></category></item><item><title><![CDATA[Gym 101490K dp]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78175585</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78175585</guid><author>Bahuia</author><pubDate>Sun, 08 Oct 2017 16:17:29 +0800</pubDate><description><![CDATA[题意：题目链接：https://vjudge.net/problem/Gym-101490K 
一个环上有L个点，每个两个相邻的点相距1个单位，现在要在这些点上插旗子，要求长度为S的区间内至少要有一个旗子，问方案数。思路：dp[x]表示长度为x的区间，首尾位置都插旗的合法方案数。 
很显然dp[i]=dp[i-1]+dp[i-2]+…+dp[i-s]； 
至于环如何处理，首先取一个任意的起点，然后枚]]></description><category></category></item><item><title><![CDATA[HDU 5618 CDQ分治（三维偏序）]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78167585</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78167585</guid><author>Bahuia</author><pubDate>Fri, 06 Oct 2017 22:49:13 +0800</pubDate><description><![CDATA[题意：题目链接：http://acm.split.hdu.edu.cn/showproblem.php?pid=5618 
给出n个有序对(a,,b,c)，对于每个(ai,bi,ci)找到满足aj <=ai，bj<=bi，cj<=ci的有序对有多少个。思路：典型的三维偏序问题，可以用CDQ分治来解决。 
首先将有序对按照a的大小排序，这样对区间[L,R)进行分治的时候就可以默认左半部分[L,M)的a]]></description><category></category></item><item><title><![CDATA[HDU 5649 线段树+二分]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78157689</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78157689</guid><author>Bahuia</author><pubDate>Wed, 04 Oct 2017 11:40:03 +0800</pubDate><description><![CDATA[题意：题目链接：http://acm.split.hdu.edu.cn/showproblem.php?pid=5649 
n个数的排列，两种操作，一种将[L,R]区间内的数递减排序，另一种将[L,R]中的数递增排序，问最后第k个位置的数字是多少。思路：好题。 
因为最后考虑的只是第k个位置的数字，二分答案。 
每次将序列中比x大的都标记为1，其余包括x标记为0，每次排序前，先查询区间中有多少个1和]]></description><category></category></item><item><title><![CDATA[HDU 4605 主席树]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78156189</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78156189</guid><author>Bahuia</author><pubDate>Tue, 03 Oct 2017 20:41:55 +0800</pubDate><description><![CDATA[题意：题目链接：http://acm.split.hdu.edu.cn/submit.php?pid=4605 
一棵二叉树，根节点为1，每个节点都有一个权值，给出q个询问，每次询问给出v和x，问数字x从根节点落下，到节点v的概率是多少。 
其中数x假如到达一个节点u： 
1. 如果x==w[u]，则x留在该节点。 
2. 如果x>w[u]，则x有1/8概率往左子树走，有7/8概率往右子树走。 
3]]></description><category></category></item><item><title><![CDATA[HDU 5919 主席树]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78149974</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78149974</guid><author>Bahuia</author><pubDate>Mon, 02 Oct 2017 10:03:13 +0800</pubDate><description><![CDATA[题意：题目链接：http://acm.split.hdu.edu.cn/showproblem.php?pid=5919 
给出n个数字，q个询问，询问在[L,R]区间内，如果有k个不同的数字，那么第(k+1)/2个数字第一次出现的下标是多少。思路：一开始以为和spoj的那题一样，只要主席树计算区间种类数，然后二分即可，但是一直T。 
其实不用二分，如果按照计算种类数的方式建立可持久化线段树，那么每]]></description><category></category></item><item><title><![CDATA[SPOJ DQUERY 离线树状数组or主席树]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78149232</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78149232</guid><author>Bahuia</author><pubDate>Sun, 01 Oct 2017 22:34:58 +0800</pubDate><description><![CDATA[题意：题目链接：http://acm.sdibt.edu.cn:8080/vjudge/problem/viewProblem.action?id=13725 
给出n个数，问区间[L,R]中有多少不同的数。思路：经典题。 
可以离线+树状数组，离线保存查询，按照r排序，用last数组保存每个数最接近当前询问r的位置。 
也可以主席树，从右到左建树，pos保存每个数字的当前最左位置，每次在新版本的线]]></description><category></category></item><item><title><![CDATA[HDU 4417 主席树]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78148650</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78148650</guid><author>Bahuia</author><pubDate>Sun, 01 Oct 2017 20:23:36 +0800</pubDate><description><![CDATA[题意：题目链接：http://acm.split.hdu.edu.cn/showproblem.php?pid=4417 
给出n个数和m个询问，询问区间[L,R]中小于等于k的数有多少。思路：常见的主席树思路； 
但是在处理区间[L,R]的离散化时没有考了离散之后L大于R的情况，结果一直莫名其妙MLE了很久。代码：#include <bits/stdc++.h>
using namespace s]]></description><category></category></item><item><title><![CDATA[HDU 3943 二分+数位dp]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78138853</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78138853</guid><author>Bahuia</author><pubDate>Sat, 30 Sep 2017 08:43:12 +0800</pubDate><description><![CDATA[题意：题目链接：http://acm.hdu.edu.cn/showproblem.php?pid=3943 
在区间[P,Q]中找到第k大的数位上还有x个4以及y个7的数。思路：二分+数位dp。代码：#include <bits/stdc++.h>
using namespace std;
typedef long long LL;LL p, q, x, y, k;
int a[25];
LL d]]></description><category></category></item><item><title><![CDATA[hihocoder 1259 推公式+数位dp（非dfs写法）]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78135236</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78135236</guid><author>Bahuia</author><pubDate>Fri, 29 Sep 2017 16:36:31 +0800</pubDate><description><![CDATA[题意：题目链接：http://hihocoder.com/problemset/problem/1259?sid=1199888 
给出f(x)的定义，给出n和k，求f(1)~f(n)中模k==（0~k-1)的个数的异或和。思路：首先推公式，可以得到f(2n)=f(n)*3,f(2n+1)=f(2n)+1； 
根据公式，写几个例子可以发现，对于一个数，比如5，二进制形式(101)，可以发现f(5)=]]></description><category></category></item><item><title><![CDATA[HDU 5896 CDQ分治+NTT]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78109364</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78109364</guid><author>Bahuia</author><pubDate>Wed, 27 Sep 2017 09:34:01 +0800</pubDate><description><![CDATA[题意：题目链接：http://acm.hdu.edu.cn/showproblem.php?pid=5829 
求n个点能构成的有环图的数目。思路：母题是HDU 5552：http://blog.youkuaiyun.com/Bahuia/article/details/78109301 
两题思路一致，只是改变了所求结果，推导发生变化。代码：#include <bits/stdc++.h>
using nam]]></description><category></category></item><item><title><![CDATA[HDU 5552 CDQ分治+NTT]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78109301</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78109301</guid><author>Bahuia</author><pubDate>Wed, 27 Sep 2017 09:30:07 +0800</pubDate><description><![CDATA[题意：题目链接：http://acm.hdu.edu.cn/showproblem.php?pid=5829 
统计n个点可以组成多少种不同的有环连通图，其中每条边可以染成m种颜色。思路：分别统计f(n)为n个点的连通图数目，g(n)为n个点能构成的图数目，h(n)为n个点能构成的树的数目，然后递推出公式，发现是个卷积形式，可以用FFT加速，这里会爆精度，改用NTT。代码：#include <bit]]></description><category></category></item><item><title><![CDATA[hihocoder 1580 枚举+dp+RMQ]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78075597</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78075597</guid><author>Bahuia</author><pubDate>Sun, 24 Sep 2017 10:58:18 +0800</pubDate><description><![CDATA[题意：题目链接：http://hihocoder.com/problemset/problem/1580?sid=1195305 
给出一个矩阵，让你将其中一个数的值变成p（必须修改一个，且仅能修改一个），然后求最大子矩阵和。思路：2017北京网络赛C题，这题最后没A真是好气啊。 
一开始被带偏榜，花了太多时间在D上，结果一直wa，后来C题过得多了再来看C题，秒出思路，然后一直WA到结束。 
只不过]]></description><category></category></item><item><title><![CDATA[HDU 4511 AC自动机+DP]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78065309</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78065309</guid><author>Bahuia</author><pubDate>Fri, 22 Sep 2017 17:29:24 +0800</pubDate><description><![CDATA[题意：题目链接：http://acm.hdu.edu.cn/showproblem.php?pid=4511 
中文题。思路：常见的思路，不过要注意x和y要用double，否则溢出。代码：#include <bits/stdc++.h>
using namespace std;
const double INF = 1e20;
const int MAXN = 505;
const int K =]]></description><category></category></item><item><title><![CDATA[HDU 5769 后缀数组+二分]]></title><link>https://blog.youkuaiyun.com/Bahuia/article/details/78063866</link><guid>https://blog.youkuaiyun.com/Bahuia/article/details/78063866</guid><author>Bahuia</author><pubDate>Fri, 22 Sep 2017 15:57:30 +0800</pubDate><description><![CDATA[题意：题目链接：http://acm.hdu.edu.cn/showproblem.php?pid=5769 
求一个字符串中包含字符x的不同子串有多少个思路：处理出height数组，对于每个后缀i，二分得出i之后的第一个字符x的位置，max(x,sa[i]+height[i])之后的位置结尾得到的字符串都是唯一的，相见代码。代码：#include <bits/stdc++.h>
using nam]]></description><category></category></item></channel></rss>