[BZOJ 4152][AMPPZ 2014]The Captain】的更多相关文章

这道题对费用的规定是min(|x1-x2|,|y1-y2|).如果暴力枚举所有的点复杂度O(n²),n <= 200000,显然爆炸.于是我们要考虑加“有效边”,一个显然的事实是对于两个点,如果经过不在两点连线上的第三个点中转得到的费用之和一定比直接连边小.所以考虑排个序,分别按照x.y排序,依次加边,有点类似贪心的思想,让每次加边的费用尽可能小,然后跑下dijkstra就行.注意,本题卡SPFA. P.S 我之前WA了好几次的原因是inf不够大QAQ,每个点坐标<=1e9,inf开1e10才…
bzoj 4152[AMPPZ2014]The Captain 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用. 一开始我居然把这个取min看成取曼哈顿距离.. 暴力建图是\(n^2\) 考虑两个点,可以以\(|x_1-x_2|\)和\(|y_1-y_2|\)为权值分别建图,在跑最短路的时候也不会去走那条权值大的边,这样就不用再管\(\min\)了 以以\(|x_1-x_2|\)为权值加边为例,有三个点\(i…
循环队列基础知识 1.循环队列需要几个参数来确定 循环队列需要2个参数,front和rear 2.循环队列各个参数的含义 (1)队列初始化时,front和rear值都为零: (2)当队列不为空时,front指向队列的第一个元素,rear指向队列最后一个元素的下一个位置: (3)当队列为空时,front与rear的值相等,但不一定为零: 3.循环队列入队的伪算法 (1)把值存在rear所在的位置: (2)rear=(rear+1)%maxsize ,其中maxsize代表数组的长度: 4.循环队列…
先按x排序, 然后只有相邻节点的边才有用, 我们连起来, 再按y排序做相同操作...然后就dijkstra ------------------------------------------------------------------------ #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<queue> #include…
[题目链接] 点击打开链接 [算法] 按x轴排序,将相邻点连边 按y轴排序,将相邻点连边 然后对这个图跑最短路就可以了,笔者用的是dijkstra算法 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 200000 struct info { int id,x,y; } a[MAXN+]; int N,i; ]; vector< pair<]; template <typename T> inl…
Code: #include <queue> #include <cstdio> #include <cstring> #include <algorithm> #define N 400005 #define ll long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; ll d[N]; int n,edges; int hd…
题面 Description 今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会. 全国的城市构成了一棵以SZ市为根的有根树,每个城市与它的父亲用道路连接.为了方便起见,我们将全国的 n 个城市用 1 到 n 的整数编号.其中SZ市的编号为 1.对于除SZ市之外的任意一个城市 v,我们给出了它在这棵树上的父亲城市 fv 以及到父亲城市道路的长度 sv. 从城市 v 前往SZ市的方法为:选择城市 v 的一个祖先 a,支付购票的费用,…
阿拉~好像最近总是做到 AC 自动机的题目呢喵~ 题目的算法似乎马上就能猜到的样子…… AC 自动机 + 数位 dp 先暴力转移出 f[i][j] :表示从 AC 自动机上第 j 号节点走 i 步且不碰到匹配串的方案数 然后直接用数位 dp 一位一位的试就可以了,大家都会吧~ 但是…… 有前导 0 的情况真尼玛蛋疼啊! 忽的灵光一闪…… 前导 0 仅能影响长度小于 L 的数的统计 那么所有长度 <L 的数全部专门暴力统计一边不就可以了!我真是特么太机智了喵~ O(∩_∩)O~ 虽然有个 O(10…
我觉得这一题的样例输出一点都不和谐,大家千万别像我一样被坑了…… 题目不算难,果然是进错省系列555,不过搞出 O(n*m*2m) 的还是不要挣扎的比较好 我们暴力地推出第 n 行 第 m 列中每个数是第 1 行的哪些数的 nim 和 ——O(n3) 然后再算出 b[j] = a[n][j] xor a[n-1][j] xor a[n][j+1] xor a[n][j-1] 就有了一个似是而非的一个抑或方程组,因为如果去解的话结果一定是 xi=0 怎么办呢? 既然题目说一定有解,必然存在一个 x…
设(x,y)为Q的查询点,分类讨论如下:1.y>0:  最大化a*x+b*y,维护一个上凸壳三分即可 2.y<0:最大化a*x+b*y  维护一个下凸壳三分即可 我们考虑对时间建出一棵线段树 对于每个区间,如果满了就做出两个凸壳 总时间复杂度是O(n*log^2n) 之后我们考虑查询,每个区间最多被分解为log(n)个区间 在每个区间的凸壳上三分最优解即可 至于优化,可以设定一个阈值,当区间长度小于阈值时不用做凸壳,查询时直接暴力就可以了 #include<cstdio> #inc…
标题效果:到m*n该网络格,问:有网络格是一个三角形的顶点的数目. 思维:数学.首先计算所有三个相同的,不.然后,在上线的一个点失去了三个点是其中.需要注意的是,答案开放long long. CODE: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int m,n; int Gcd(int x,int y);…
题目:https://www.luogu.org/problemnew/show/P4106 https://www.lydsy.com/JudgeOnline/problem.php?id=3614 从很小的情况考虑,看题面上的样例: x1=+1 x2=+1  0 x1=+1 x2=-1  1 x1=-1 x2=+1  2 x1=-1 x2=-1  3 手算的做法应该是设原式为 a0 + a1x1 + a2x2 + a3x1x2 通过加减,把关于 x2,x1 的项逐渐消去,得到常数项后再回代,…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3872 从食蚁兽所在的边向叶节点推,会得到一个渐渐放大的取值区间,在叶子节点上二分有几群蚂蚁符合条件即可: 注意中途判断,如果已经超过范围就返回或者处理一下,据说会爆 long long 之类的: 而且食蚁兽所在的边的两个端点的初始值不一定是 k 和 k+1 !也要看度数! 注意统计答案的 num 也是 long long . 代码如下: #include<iostream> #inclu…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3714 因为每个杯子下最多一个小球,所以从奇偶性就可以看出有没有球: 询问一段区间,等于知道一段区间的奇偶性: 设 s[i] 表示从 0 到 i 的小球总数的奇偶性,已知 s[0] = 0: 那么询问区间 [l,r] ,相当于知道了 s[l-1] ^ s[r],那么知道其中一个就可以知道另一个了,而目标是知道所有 s[i] , 1 <= i <= n 所以把询问区间 [l,r] 看做是 l…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3598 数位DP...东看西看:http://www.cnblogs.com/Artanis/p/3751644.html     https://www.cnblogs.com/MashiroSky/p/6399095.html 好巧妙的思路啊!这样统计的东西就变得很简单了: 好美的 dfs!数位DP用 dfs 好像能变得很清楚. 代码如下: #include<iostream> #in…
题目大意:实在是太难说明了,自己看pdf吧.. 思路:优先依照它说明的方法处理数组,然后为了让数列中尽可能多的出现小的数字,所以1是必需要出现的,这样才干使整个数列的排序后字典序最小. 我们思考,假设2也能在这个数列中那就最好只是了,可是2有可能不在这个数列里,就是2在走了1就不可能走的地方的话,就不能走2了.所以从小到大枚举数字,假设当前数字能走,就输出,然后标记全部走了这个节点就不能走的节点.空间比較紧.5000*5000能够开int*2+bool*1,极限了.. CODE: #includ…
传送门 Description SHOI 概率充电器由 n-1 条导线连通了 n 个充电元件.进行充电时,每条导线是否可以导电以概率决定,每一个充电元件自身是否直接进行充电也由概率决定. 随后电能可以从直接充电的元件经过通电的导线使得其他充电元件进行间接充电. 进入充电状态的元件个数的期望是多少呢? Solution \[ E=\sum f_i\ \ \ 其中f_i表示节点i通电的概率 \] 那么怎么求\(f_i\)呢?显然,一个点通电有三种情况:来自i的父亲节点.来自i的某个儿子节点.来自i自…
最短路 题解:http://zyfzyf.is-programmer.com/posts/97953.html 按x坐标排序,相邻点之间连边.满足dist(x1,x3)<=dist(x1,x2)+dist(x2,x3)(因为可以走y) 再按y坐标排序,相邻点之间连边.同上 然而SPFA挂了……写了Dijkstra /************************************************************** Problem: 4152 User: Tunix La…
The Captain(BZOJ 4152) Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用. Input Format 第一行包含一个正整数n(2<=n<=200000),表示点数. 接下来n行,每行包含两个整数xi,yi(0<=xi,yi<=10^9),依次表示每个点的坐标. Output Format 一个整数,即最小费用. Sample Input 5 2 2 1…
BZOJ 4152 很显然这个题是让找最短路: 这种通过一个节点到达另一个点的路径我们可以想到dijkstra,然后这道题我们可以看到点是比较多的,所以我们怎么存图呢? 首先我们对于任意三个点,A(x1,y2),B(x2,y2),C(x3,y3)(假设A,B,,C相邻),我们画个图,如果我们直接从A到C那么我们走的将会是x的累和取min y的累和,但如果从a到b再到c我们取得是x的差值,y的差值取min加上b到c的距离,通过计算比较,是比直接到省时间的,推广到四个点也是,但是要保证相邻两个点建图…
这是一个向导 A - hdu 3652 B - bzoj 4152 C - bzoj 2429 D - bzoj 1087 E - bzoj 1566 F - bzoj 4043 G - bzoj 1052 H - bzoj 2957 I - bzoj 2463 J - bzoj 2190 Problem A  B-number 题目大意 求1到n中包含连续子串"13"的数且能被13整除的数有多少个. ->题目传送站[here] 不难想到数位dp,现在开始设计状态.包含子串&qu…
似乎该写题解了.今天模拟ACM,10道题(本来还有2道被删了),9道都来自BZOJ,中间我做过2道.那么说,今天Solv.便大大增多了(但还是不如强大的Amphetamine). 题单及一句话题解如下: A.HDU 3652 B-number(数位DP):当时硬没有想到去存13的余数,一直想着13倍数的判断法则.最后无奈,只有打表(原则上可以AC),但是vjudge与HDU允许的cpp文件大小上限不同,导致vjudge卡打表(不想再调) B.BZOJ 4152 [AMPP2014]The Cap…
一.预备知识 \(tD/eD\) 问题:状态 t 维,决策 e 维.时间复杂度\(O(n^{e+t})\). 四边形不等式: 称代价函数 w 满足凸四边形不等式,当:\(w(a,c)+w(b,d)\le w(b,c)+w(a,d),\ a < b < c < d\) 如下所示,区间1.2对应的 w 之和 ≤ 3.4之和 \[ \underbrace {\overbrace {a \to \underbrace{b \to c}_3}^1 \to d }_4 \llap{\overbrac…
4152: [AMPPZ2014]The Captain Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 2107  Solved: 820[Submit][Status][Discuss] Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用. Input 第一行包含一个正整数n(2<=n<=200000),表示点数. 接下来n行,每行包含…
4152: [AMPPZ2014]The Captain Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1561  Solved: 620[Submit][Status][Discuss] Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用. Input 第一行包含一个正整数n(2<=n<=200000),表示点数. 接下来n行,每行包含…
代换一下变成多项式卷积,这里是的答案是两个卷积相减,FFT求一下两个卷积就可以啦 详细的题解:http://www.cnblogs.com/iwtwiioi/p/4126284.html #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 500003; const double Pi = acos(…
题目传送门 bzoj 3522 需要root权限的传送点 bzoj 4543 快速的传送点 慢速的传送点 题目大意 给定一棵树,问有多少个无序三元组$(x, y, z)$使得这三个不同点在树上两两距离相等. 考虑这三个点构成的虚树.选取一个"舒适"的计数对象. 其中黄色的点是关键点,绿色的点是虚树上的虚点. 在树形动态规划的时候通常考虑一个点子树内的情况会比较简单.因此考虑将计数对象设为虚树上最浅的一个点. 性质1 最近公共祖先深度较深的两点到它们的最近公共祖先的距离相等. 证明 设这…
这题可以用回文自动机来做,但是我并没有学,于是用Manacher+SA的做法O(nlogn)水过 首先,看到回文串就能想到用Manacher 同样还是要利用Manacher能不重复不遗漏地枚举每个回文子串的性质 只是不重复不遗漏还不够,我们还要统计出现次数 每个子串一定是一个后缀的前缀,于是可以用后缀数组 用后缀数组求出height数组之后,对于在Manacher过程中枚举到的每个长度为k的回文串,可以在height数组中二分,用O(logn)的时间求出这个子串的出现次数 BZOJ和COGS上有…
http://www.lydsy.com/JudgeOnline/problem.php?id=2014 这应该是显然的贪心吧,先排序,然后按花费取 #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream> #include <algorithm> #include <queue> using na…
http://www.lydsy.com/JudgeOnline/problem.php?id=3876 这道题每条支线的意思是每条边... 那么每条边的下界设为1就行了. 这样建出一个DAG,每条边下界为1,上界为正无穷,赋上费用.设1为S.所有点向T连边,下界为0,上界为正无穷,费用为0,表示可以随时退出.答案是这个图中的最小费用可行流. 最小费用可行流怎么求啊! 可行流什么的我只会求无源汇的. 想了好半天才明白该怎么做... 抛弃原来的建图,还是建出一个DAG,每条边下界为1,上界为正无穷…