ACM_POJ
文章平均质量分 56
TouchDreamer
这个作者很懒,什么都没留下…
展开
-
POJ 1740 Tree(点分治)
题目分析 这道题是挑战上的一道题目,挑战上面代码写的很长并且不容易理解。此题也是楼教主男人八题之一。不过随着算法竞赛的难度逐年增加,以前的论文题现在也变成了模板题,关于点分治的问题很多,区域赛也有出过。 这道题具体方法是这样的,我们首先对树找重心,重心不理解的可以去查资料。然后根据重心对树进行分治,我们计算到树根距离小于等于K的节点,然后计算有多少对,但是我们会发现我们子树进行分治时这些点原创 2017-05-09 20:33:07 · 404 阅读 · 0 评论 -
POJ 3744 Scout YYF I (概率dp+矩阵快速幂,好题)
题目大意 本题很容易求出状态转移方程dp[I]=p∗dp[I−1]+(1−p)∗dp[I−2]dp[I] = p*dp[I-1]+(1-p)*dp[I-2],但是很容易发现这道题的n很大,线性算肯定是不可能,因此利用矩阵快速幂加速无疑是最好的方法。这道题相当于有N个不能过的点,那么我们把不能过的点的概率算出来,用1减去它就可以得到该点的后一个点的dp[i],然后乘以矩阵快速幂得到的结果即可。#原创 2016-10-15 11:29:28 · 264 阅读 · 0 评论 -
POJ 1651 Multiplication Puzzle(区间dp)
题目分析 感觉记忆化搜索好写多了,找到递归边界,一会就写出来了,正着推老是因为要用小区间去推大区间,因此计算顺序很重要,很容易写错,但是记忆化搜索就不怎么用担心这个问题。这道题就是矩阵连乘问题的改版,这道题如果想着一个一个删除处理起来及其不方便,因此还是一个一个往里面加简单,很多dp题都是这样正着推不好推,但是倒着推很容易得到答案。#include <cstdio>#include <cst原创 2016-07-25 16:56:47 · 264 阅读 · 0 评论 -
POJ 2155 Matrix(二维树状数组)
题目分析 这道题的思路很巧妙,不过这种思想我在写其他题的时候也用过。 那道题的操作是先对区间进行操作,包括区间内所有值都增加x或者区间所有值都减少x,其实处理起来很简单,对于a[l]我们加x,对于a[r+1]减x处理完成之后,就是这样处理之后,如果问你a数列哪个位置上的值,我们就可以利用前缀和的思想,一个for循环,从头到尾可以把所有值都算出来,不懂得可以手动模拟一下。其他的就是树状数组的原创 2016-11-04 19:48:57 · 284 阅读 · 0 评论 -
树状数组入门之POJ 2352 Star
树状数组BIT(Binary index tree) 对于树状数组而要我们可以发现树状数组的那个图就是线段树的去掉所有右孩子节点得到的,因此树状数组相当于在线段树上做了一个优化,相当于去掉了一个常数,并且空间上也进行了优化,线段树通常需要比原来大小开4倍,但是树状数组就不用,但是树状数组只提供2种操作,一个就是询问1到x的所有数的和,另一个就是对单点进行更新,其他操作较为复杂。操作一int s原创 2016-11-04 10:53:54 · 227 阅读 · 0 评论 -
POJ 2449 Remmarguts' Date(A* + spfa)
题目分析 本题就是求k短路,其实自己也没有学过A*算法f[x]=g[x]+h[x]f[x] = g[x]+h[x] 在本题中g[x]为估价函数,表示从x点达到目标点的距离,注意g[x],小于等于真实值,因此这样就可以用spfa跑一边最短路即可,至于h[x]表示到达当前点x的代价,很明显这个在运算的时候可以得到,这样就可以构建一个优先队列求解了。h[x]+g[x]小的先出队,并且用一个计数的原创 2016-10-21 12:03:28 · 181 阅读 · 0 评论 -
POJ 3261 Milk Patterns
题目分析 给出一个序列,求重复K次的最长子串。很明显后缀数组构造出来,然后利用height数组的性质,通过二分枚举,找到有没有一个连续的区间[i,j]中所有的height值都大于等于mid。这样很容易就得出答案了。#include <ctime>#include <cstdio>#include <cstring>#include <iostream>#include <algorit原创 2016-09-07 21:58:20 · 188 阅读 · 0 评论 -
POJ 3311 Hie with the Pie(状态压缩dp)
题目分析 这道题需要求从0点出发(披萨店)经过其他所有点,并且回到原点的最短距离,因为点数不多最多10个点,很明显是一个TSP问题,并且可以用状态压缩dp进行求解。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int INF = 0原创 2016-09-01 18:36:57 · 224 阅读 · 0 评论 -
POJ 1743 Musical Theme(后缀数组)
题目分析 本题使用height数组的性质进行解题,自己想了很久终于想明白了。因为这道题求的是不能重复的最长公共子串,因此处理起来相比较直接求最长公共子串难一些。首先肯定是自己写模板了,把height数组建立起来,然后我们就可以二分得出结果了(通过不断二分枚举不重叠子串的最大长度),二分查找的细节我的代码给了注释。大家会发现后来我们输出的结果是ans+1,因为我们最初求最长公共子序列用到的是后一个原创 2016-09-01 17:33:46 · 273 阅读 · 0 评论 -
尺取法(POJ 3061,3320,3276)
尺取法 交替推进2个端点直接得到答案的方法称为尺取法。POJ 3061#include <map>#include <set>#include <vector>#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;原创 2016-09-13 09:30:37 · 205 阅读 · 0 评论 -
博弈论习题集(由易到难)
博弈论习题集(由易到难) 在做题目之前如果一点也不懂还需要看一下博弈论的基础知识三大基础博弈HDU 1846 Brave Game#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;typedef long long LL;int read(){原创 2016-08-20 20:19:01 · 2664 阅读 · 0 评论 -
树形dp基础题
树形dp基础题 该dp的实质就是利用树的性质,儿子节点返回的值可以被父亲节点加以利用以及处理,这样就构成了一种在树结构上的动态规划,简称树形dp。从昨天开始决定刷树形dp专题,刷了4道水题,因此想写一个博客总结一下。POJ 1463 Strategic game 这道题就是在树上的节点添加守卫,很明显我们可以得出以下结论,如果父亲节点不添加守卫,那么儿子节点一定要添加守卫,如果父亲节点添加原创 2016-08-03 14:31:14 · 416 阅读 · 0 评论 -
POJ 1947 Rebuilding roads
POJ 1947 Rebuilding roads 树形dp经典题目,没做过此类题,想了好半天,用到了分组背包的思想,注释写的很清楚,因此就不多讲了。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 155;co原创 2016-08-03 16:12:03 · 347 阅读 · 0 评论 -
POJ 1182 食物链(种类并查集)
题目分析 这道题主要有三种关系,就是A吃B,A被B吃,还有就是A与B是相同类型的。因此我们可以用一个数组re[]来表示与父根之间的关系,当值为0时这个表明当前该动物与父根动物是同一类型,如果为1那么该动物被父根动物吃,如果为2表明该动物可以吃父根动物,因此依赖关系就建立起来了。 对于每次询问如果这2个动物在一个并查集中,那么只需要判断一下即可,如果不在同一个并查集中那么需要建立关系。具体开原创 2016-10-26 13:10:12 · 427 阅读 · 0 评论 -
HDU 5945 Fxx and game(dp+单调队列优化)
题目分析 当初打bestcoder的时候我用广搜写的,并且我知道会超时,但是因为那天脑子太昏了不知道怎么优化,赛后rejudge果然tle。这道题就是用单点队列存放当前位置的前t个位置中最小的那个,代码很懂,也很容易理解,这里就不多说了。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>u原创 2016-11-09 21:08:00 · 310 阅读 · 0 评论 -
POJ 2481 Cows(树状数组)
题目分析 这道题真的是给我wa出血!!主要是因为数组忘了初始化,以后还是要注意这些问题。这道题我以先按E排序从大到小排序,然后按照S从小到大排序,排序完成即可以树状数组求解即可。注意前后2个S,E值相同的情况。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace原创 2017-04-25 20:58:24 · 269 阅读 · 0 评论 -
POJ 1236 Network of Schools(强连通分量)
题目分析 这道题首先强连通处理 ,然后求缩点之后的每个点的入度和出度。第一个肯定就是输出入度为0的点,第二个就是输出入度和出度的最大值,因此要保证一个图强连通,那么这个图的每个点肯定既有出去的边也有进来的边。注意当整个图相连通的时候的时候要特判。#include <stack>#include <vector>#include <cstdio>#include <cstring>#in原创 2017-04-13 19:41:56 · 192 阅读 · 0 评论 -
POJ 1830 开关问题
题目分析 高斯消元不过要判断是否有解,并且有多少解。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 35;int a[maxn], b[maxn], A[maxn][maxn], n;void guess(){原创 2017-01-18 20:09:13 · 250 阅读 · 0 评论 -
POJ 1222 EXTENDED LIGHTS OUT
题目分析 读完整个题目一直感觉会有多解,但是题目好像并没有这个意思,于是我就按有唯一解的写法写的。直接构造一个30个方程,然后高斯消元就行了。#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int m原创 2017-01-18 13:53:47 · 204 阅读 · 0 评论 -
POJ 2728 Desert King(最优比例生成树)
题目大意 有n个村庄,村庄在不同坐标和海拔,现在要对所有村庄供水,只要两个村庄之间有一条路即可,建造水管距离为坐标之间的欧几里德距离,费用为海拔之差,现在要求方案使得费用与距离的比值最小,很显然,这个题目是要求一棵最优比率生成树。解法 有带权图G, 对于图中每条边e[i], 都有benefiti和costi, 我们要求的是一棵生成树T, 它使得 ∑(benefit[i]) / ∑(cost原创 2017-01-13 11:20:26 · 298 阅读 · 0 评论 -
POJ 3071 FootBall 概率dp
题目分析 这道题其实就是全概率公式的应用,可以定义状态为ans[i][j],其表示第j个队在第i轮胜出的概率,这样的话状态转移方程就很好写了。 ans[i][j]=∑ans[i−1][j]∗ans[i−1][k]∗a[j][k];ans[i][j] = \sum ans[i-1][j]*ans[i-1][k]*a[j][k]; 比如8个队,用2进制表示为 000, 001,010,0原创 2017-01-10 16:31:52 · 234 阅读 · 0 评论 -
POJ 2154 Color
用欧拉函数优化的polya原理#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 36000;int vis[maxn], prime[maxn];int T, n, p;void init(){ //素数筛原创 2017-01-10 15:54:57 · 208 阅读 · 0 评论 -
POJ 1026 Ciper(置换里的循环)
题目分析 这道题的输入处理起来有点麻烦,要用gets读取一行,注意前面还有一个空格。然后就是找循环节,用vector存储,每个vector的大小就是一个循环节的大小,然后处理一下即可,之一每个事例结束后还要加一个换行符。#include <cstdio>#include <vector>#include <cstring>#include <iostream>#include <alg原创 2017-01-07 13:44:48 · 309 阅读 · 0 评论 -
POJ 1845 Sumdiv(逆元或者二分求解等比数列)
题目分析 本题是求ABA^B所有因子和对9901取模后的值。我们可以将A进行拆分。A=pk11∗pk22∗pk33.......∗pknnA = p_1^{k_1}*p_2^{k_2}*p_3^{k_3}.......*p_n^{k_n}那么可以得到AB=pk1B1∗pk2B2∗pk3B3.......∗pknBnA^B = p_1^{k_1 B}*p_2^{k_2 B}*p_3^{k_3 B}原创 2017-01-05 17:25:49 · 258 阅读 · 0 评论 -
POJ Space Elevator(排序+多重背包)
题目分析 好久没有写背包了,因此找了一个多重背包练一下,因为多重背包是01背包和完全背包的结合,手生,写了有一会!!! 就是给你一下砖块,每一个砖块一个高度,给出数量和这样砖块最多能放的高度。。 这道题因为每个点的限制不一样,所以需要从限制小的先进行dp,因为限制大的可以放在限制小的上面,但是限制小的无法再往大的上面堆,这样就算错了。。#include <cstdio>#incl原创 2016-10-31 16:33:51 · 538 阅读 · 0 评论 -
POJ 2923 Relocation(状态压缩+背包思想)
题目分析 因为是判断2辆车能够运多少次才能把所有的物品给运完,因为物品数不够多,因此可以枚举状态,判断每个状态能否由2辆车给运完,这里面可以用01背包的思想进行判断,然后自己就可以通过状态压缩写出状态转移方程,很明显dp[(1<<n)−1]dp[(1<<n)-1]就是答案。#include <cstdio>#include <cstring>#include <iostream>#inc原创 2016-10-31 12:23:31 · 515 阅读 · 0 评论 -
POJ 2186 Popular Cows(强连通分量)
题目分析 就是找所有牛都认为是红人的牛的个数,一看就知道是强连通分量按拓扑排序之后标号最大的那个,然后根据反向遍扫一遍看看是否能够把所有点都跑一边,如果可以,说明编号最大的那个强连通分量中所有节点都可以被所有人都看做红人。#include <vector>#include <cstdio>#include <cstring>#include <iostream>#include <al原创 2016-10-31 11:23:42 · 288 阅读 · 0 评论 -
POJ 1655 Balancing Act
题目分析 本题就是求每个节点的最小balance,如果有多个节点有相同的balance,那么输出最小的一个。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 2e4+5;const int INF = 0x3f3原创 2016-08-03 16:37:27 · 258 阅读 · 0 评论 -
矩阵快速幂(NYOJ 148 fibonacci数列(二), POJ 3233 Matrix Power Series, hdu 2157 How many ways??)
矩阵快速幂 普通的快速幂大家应该都懂,对于矩阵快速幂来说,处理的不是数字而是矩阵。由于矩阵乘法具有结合律,因此A^4 = A * A * A * A = (A*A) * (A*A) = A^2 * A^2。我们可以得到这样的结论:当n为偶数时,A^n = A^(n/2) * A^(n/2);当n为奇数时,A^n = A^(n/2) * A^(n/2) * A (其中n/2取整)。这就告诉我们,计原创 2016-07-18 21:01:20 · 270 阅读 · 0 评论 -
POJ 2763 Housewife Wind
题目分析 题目很水,理解了很简单,就是套模板。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 100005;#define mid (L+R)/2#define lson o<<1, L, mid#defi原创 2016-07-28 19:01:57 · 225 阅读 · 0 评论 -
POJ 【2739】 Sum of Consecutive Prime Numbers
Sum of Consecutive Prime NumbersTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 22411 Accepted: 12262DescriptionSome positive integers can be represented原创 2016-04-11 21:14:42 · 212 阅读 · 0 评论 -
POJ 【3984】 迷宫问题
迷宫问题Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 13874 Accepted: 8284Description定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0,原创 2016-04-15 08:46:48 · 213 阅读 · 0 评论 -
POJ 【3278】 Catch That Cow
Catch That CowTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 70204 Accepted: 22082DescriptionFarmer John has been informed of the location of a fugit原创 2016-04-15 08:15:18 · 247 阅读 · 0 评论 -
poj 【2251】 Dungeon Master
Dungeon MasterTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 24669 Accepted: 9554DescriptionYou are trapped in a 3D dungeon and need to find the quic原创 2016-04-14 21:11:12 · 380 阅读 · 0 评论 -
poj 【1321】
棋盘问题Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 32487 Accepted: 16117Description在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编原创 2016-04-14 20:31:27 · 273 阅读 · 0 评论 -
POJ 【1088】 滑雪
滑雪Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 88858 Accepted: 33341DescriptionMichael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等原创 2016-04-27 11:52:07 · 4018 阅读 · 3 评论 -
POJ 【3414】 Pots
PotsTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 13408 Accepted: 5647 Special JudgeDescriptionYou are given two pots, having the volume of A an原创 2016-04-26 19:00:49 · 234 阅读 · 0 评论 -
hdu 【2115】 C Looooops
C LooooopsTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 21796 Accepted: 5959DescriptionA Compiler Mystery: We are given a C-language style for loop原创 2016-04-12 18:50:40 · 271 阅读 · 0 评论 -
POJ【1611】The Suspects
The SuspectsTime Limit: 1000MS Memory Limit: 20000KTotal Submissions: 29618 Accepted: 14412DescriptionSevere acute respiratory syndrome (SARS), an atypical pneumoni原创 2016-02-02 09:56:11 · 258 阅读 · 0 评论 -
POJ【2031】Building a Space Station
Building a Space StationTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 6439 Accepted: 3162DescriptionYou are a member of the space station engineering te原创 2016-01-11 23:35:13 · 449 阅读 · 0 评论