题意简述 给定一个正\(n\)边形及其三角剖分,每条边的长度为\(1\),给你\(q\)组询问,每次询问给定两个点\(x_i\)至\(y_i\)的最短距离. 做法 显然正多边形的三角剖分是一个平面图,每一条剖分的边可以将正多边形分成有一条重边的两个独立的新多边形,显然这一个过程是可以用分治来实现的. 我们对于分治过程中的多边形进行重新编号,找到两端点数最平均的边割去,对于点集\(V\),边集\(E\)和询问集\(Q\)分别开三个vector传入函数中. 如果点集的大小等于了\(3\),我们就可以…
[NOI2018模拟5]三角剖分Bsh Description 给定一个正 n 边形及其三角剖分,共 2n - 3 条边 (n条多边形的边和n-3 条对角线),每条边的长度为 1. 共 q 次询问,每次询问给定两个点,求它们的最短距离. Input 第一行一个整数 n ,表示多边形的点数: 接下来 n - 3 行,每行两个整数 ui,vi,表示一条 ai 和 bi 之间的对角线: 接下来一行一个整数 q,表示询问个数: 接下来 q 行,每行两个整数 xi,yi,表示第 i 次询问的起点和终点:…
JZOJ 5602.[NOI2018模拟3.26]Cti Description 有一个 \(n×m\) 的地图,地图上的每一个位置可以是空地,炮塔或是敌人.你需要操纵炮塔消灭敌人. 对于每个炮塔都有一个它可以瞄准的方向,你需要在它的瞄准方向上确定一个它的攻击位置,当然也可以不进行攻击.一旦一个位置被攻击,则在这个位置上的所有敌人都会被消灭. 保证对于任意一个炮塔,它所有可能的攻击位置上不存在另外一个炮塔. 定义炮弹的运行轨迹为炮弹的起点和终点覆盖的区域.你需要求出一种方案, 使得没有两条炮弹轨…
[NOI2018模拟]Yja Description 在平面上找\(n\)个点,要求这 \(n\)个点离原点的距离分别为 \(r1,r2,...,rn\) .最大化这\(n\) 个点构成的凸包面积,凸包上的点的顺序任意. 注意:不要求点全部在凸包上. Input 第一行一个整数 \(n\). 接下来一行$ n$ 个整数依次表示 \(ri\). Output 输出一个实数表示答案,要求绝对误差或相对误差 \(≤ 10^{-6}\). Sample Input 4 5 8 58 85 Sample…
470. [NOIP2013模拟联考8]最短路(path) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits   Description 给定一个n个点m条边的有向图,有k个标记点,要求从规定的起点按任意顺序经过所有标记点到达规定的终点,问最短的距离是多少.   Input 第一行5个整数n.m.k.s.t,表示点个数.边条数.标记点个数.起点编号.终点编号. 接下来m行每行3个整数x.y.…
题目描述 给出一个长度为 m 的序列 A, 请你求出有多少种 1...n 的排列, 满足 A 是它的一个 LIS. 解题思路 如何求出一个序列的LIS? 对于二分的方法,每次插入一个数,将它放到第一个比它大的数的位置处代替之,最后的长度就是LIS的长度. 考虑模拟这个过程,设f[s],表示当前这n个数的是否加入的状态为s,s是一个三进制数,0表示还没加入,1表示加入了且仍在当前的LIS中,2表示加入了且被别的数代替了. 同时有限制条件,a[i-1]一定要在a[i]前加入. #include <c…
比较容易想的题目~ 容易发现 点亮一种颜色的贡献=新增灯的数量-已经存在的边的条数. 用线段树维护并不容易.暴力的话复杂度是\(Q\cdot n\)的. 考虑根号分治 只单纯考虑度数<B的点的话 每次进行暴力 复杂度O(B). 考虑大于B的点的话 需要思考一下贡献如何快速求出. 这类点显然只有\(\frac{2n}{B}\)个 统计大于对大于的点的话复杂度O(B). 考虑大于和小于的贡献发现不能暴力了 考虑这个小于其实是之前的小于的点对当前的贡献. 那么当前的小于可以提前对这些点的贡献进行统计就…
LINK:5.15 T1 对于60分的暴力 都很水 就不一一赘述了. 由于是询问所有点的这种信息 确实不太会. 想了一下 如果只是询问子树内的话 dsu on tree还是可以做的. 可以自己思考一下. 如果强行dsu的时候做 会发现点对和点对之间难以解决. 考虑正解 点分治: 当x为分治中心还是需要统计点对和点对之间的贡献. 和刚才几乎一样.不过这个时候可以发现 需要对每个点都求一个答案. 对于深度为w的点 那么 贡献为\(\sum_{j=w}^{n}c_{j-w}a_j\) 其中\(c_x\…
题目描述 给定字符串 S 和 T. 串A和串B匹配的定义改为:存在一个字符的映射,使得A应用这个映射之后等于B,且这个映射必须为一个排列. A=121, B=313,当映射为{1->3, 2->1, 3->2}时A'=B,可以匹配 A=212, B=313,当映射为{1->1, 2->3, 3->2}时A'=B,可以匹配 A=232, B=313,当映射为{1->2, 2->3, 3->1}时A'=B,可以匹配 A=123, B=111,当映射为{1-…
4456: [Zjoi2016]旅行者 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 254  Solved: 162[Submit][Status][Discuss] Description 小Y来到了一个新的城市旅行.她发现了这个城市的布局是网格状的,也就是有n条从东到西的道路和m条从南到北的道路,这些道路两两相交形成n×m个路口 (i,j)(1≤i≤n,1≤j≤m).她发现不同的道路路况不同,所以通过不同的路口需要不同的时间.通过调查发现,…
原文链接http://www.cnblogs.com/zhouzhendong/p/8682133.html 题目传送门 - BZOJ4456 题目传送门 - UOJ#184 题意 $n\times m$的网格图$q$次询问两个格子之间的最短路. $n\times m\leq 2\times 10^4,q\leq 10^5$且任何两个相邻格子之间的路径长度$\leq 10^4$. 题解 考虑分治. 对于当前网格图以及起点和终点都在当前网格图内的询问进行处理. 考虑把当前网格图的长边作为分治对象.…
4456: [Zjoi2016]旅行者 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 777  Solved: 439[Submit][Status][Discuss] Description 小Y来到了一个新的城市旅行.她发现了这个城市的布局是网格状的,也就是有n条从东到西的道路和m条从南到北 的道路,这些道路两两相交形成n×m个路口 (i,j)(1≤i≤n,1≤j≤m).她发现不同的道路路况不同,所以通过不 同的路口需要不同的时间.通过调查发…
[BZOJ4456][Zjoi2016]旅行者 Description 小Y来到了一个新的城市旅行.她发现了这个城市的布局是网格状的,也就是有n条从东到西的道路和m条从南到北的道路,这些道路两两相交形成n×m个路口 (i,j)(1≤i≤n,1≤j≤m).她发现不同的道路路况不同,所以通过不同的路口需要不同的时间.通过调查发现,从路口(i,j)到路口(i,j+1)需要时间 r(i,j),从路口(i,j)到路口(i+1,j)需要时间c(i,j).注意这里的道路是双向的.小Y有q个询问,她想知道从路口…
BZOJ_5415_[Noi2018]归程_kruscal重构树+倍增 Description www.lydsy.com/JudgeOnline/upload/noi2018day1.pdf 好久不写题解了,趁着周末都更一下吧. 处理出以1为起点的最短路dis. 考虑每次只能走海拔大于p的边,用kruscal重构树维护一个以海拔为关键字的最大生成树. 这样我们每次能走的连通块就是一个重构树中的一个子树. 倍增找一下是哪棵子树,子树取dis的最小值即可. 代码: #include <cstdio…
/* 题意:给你一些节点和一些边,求最短路径树上是k个节点的最长的路径数. 解:1.求出最短路径树--spfa加记录 2.树上进行操作--树的分治,分别处理子树进行补集等运算 */ #include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> #include<iostream> #include<queue> #define ll __int6…
分析 类似于点分治的思想,只统计经过分割线的最短路,然后把地图一分为二. 代码 #include <bits/stdc++.h> #define rin(i,a,b) for(register int i=(a);i<=(b);++i) #define irin(i,a,b) for(register int i=(a);i>=(b);--i) #define trav(i,a) for(register int i=head[a];i;i=e[i].nxt) typedef lo…
这道题还是非常简单的,由于我们要保证最小字典序,因此我们需要把边进行排序,然后从大到小插入,因为链式前向星是倒着存的.我们只需要先跑一个最短路,然后查询边是不是在最短路上,这个可以通过枚举边并用 dist[v]=dist[u]+edge[i]判断即可,如果是的话我们在这个边上打上标记.并进行一次DFS打上标记,保证是一颗树. 然后就简单了,直接点分治查询子树链的长度和节点个树.然后就很更新保存即可,这个查询其实和上个题很相似,用一个mp保存点的个数对应的最长的链,这样就能在枚举子树的链的节点个数…
感觉比较套路,每次在长边中轴线处切一刀,求出切割线上的点对矩形内所有点的单源最短路径,以此更新每个询问,递归处理更小的矩形.因为若起点终点跨过中轴线是肯定要经过的,而不跨过中轴线的则可以选择是否经过中轴线,若不经过一定就在矩形的某一半了.复杂度O((nm)1.5log(nm)),不太会证. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cst…
题目描述 小P和小R在玩一款益智游戏.游戏在一个正权有向图上进行. 小P 控制的角色要从A 点走最短路到B 点,小R 控制的角色要从C 点走最短路到D 点. 一个玩家每回合可以有两种选择,移动到一个相邻节点或者休息一回合. 假如在某一时刻,小P 和小R 在相同的节点上,那么可以得到一次特殊奖励,但是在每 个节点上最多只能得到一次. 求最多能获得多少次特殊奖励 输入格式 第一行两个整数n,m 表示有向图的点数和边数. 接下来m 行每行三个整数xi,yi,li,表示从xi 到yi 有一条长度为li…
关于Kruskal重构树可以翻阅本人的最小生成树笔记. 这题明显裸的Kruskal重构树. 然后这题限制$\le p$的边不能走,实际上就是要满足走最小边权最大的瓶颈路,于是跑最大生成树,构建Kruskal重构树. 通过倍增跳到最浅祖先位置,就get到了一个点可以走到的点集(子树所有叶子).这些点里选出一个距离$1$最短的.dijkstra.子树维护$\min_{dis}$即可. 复杂度$O(T(M\log M+Q\log N))$ 注意Kruskal重构树的算法并不是特别容易写对.配合上多测,…
题目传送门(内部题115) 输入格式 第一行两个正整数$n,m$. 接下来$m$行,每行$4$个正整数$u_j,v_j,L_j,R_j$. 接下来一行$n$个数,若第$i$个数为$1$,则$i$号同学最后学会了毒瘤算法:若第$i$个数为$-1$,则$i$号同学最后没有学会毒瘤算法.若第$i$个数为$0$,则不知道$i$号同学最后是否学会了毒瘤算法. 输出格式 若结果不可能出现,输出一行$Impossible$:否则,输出$m$行,第$j$行一个正整数表示第$j$条信息中的两名同学在哪一天共用午餐…
题目描述 $pig$在下象棋的时候特别喜欢用马,他总是计算着自己的马还需要几步才能吃掉对方的帅,以及方案数的个数,当然$pig$很笨,所以他只能求助于你.我们假设在$n\times m$的棋盘上,$pig$的马只能走$1\times 2$的格点,他的马一开始在$st$,对方的帅在$ed$.当然,我们不能忽视友军和敌军,所以如果落点被友军占有,那么就不能飞过去了:如果落点被敌军占有,那么$pig$认为自己这一步赚了,所以不计入总步数.为了简化问题,我们的马在飞的时候不受到敌军限制. 输入格式 $p…
Preface 这次的题目都是NOI+的题,所以大家的分数都有点惨烈. 依靠T1大力骗分水到Rank2 所以想看正解的话看这里吧 A. 「雅礼NOI2018模拟赛(一) Day1」树 看一眼题目感觉十分不可做,刚开始准备写个状压的 一看数据范围好像是正解了,然而连样例都没有跑过去. 1h之后:完蛋凉凉了,那写个暴力DFS吧 10min之后码完了,想一想能不能多弄点分,这时候ZZ都看出来第一问好做. 于是开始打表,刷第一问的答案时顺便很机智地把第二问的答案也刷了出来. 这个的话直接询问的时候再膜即…
转载于http://blog.csdn.net/creationaugust/article/details/513876231000:A+B 1001:平面图最小割,转对偶图最短路 1002:矩阵树定理,也可以通过推矩阵的递推关系得到递推式 1003:最短路+DP 1007:半平面交 1008:组合数学,需要高精 1010:斜率优化/四边形不等式推决策单调性 1012:线段树 1014:Splay维护字符串的Hash值 1016:矩阵树定理,相同权值压联通块,对一个联通块用一次矩阵树定理计算方…
Equivalent Strings Problem's Link: http://codeforces.com/contest/559/problem/B Mean: 给定两个等长串s1,s2,判断是否等价. 等价的含义为: 若长度为奇数,则必须是相同串. 若长度是偶数,则将两串都均分成长度为原串一半的两个子串l1,r1和l2,r2,其中l1和l2等价且r1和r2等价,或者l1和r2等价且l2和r1等价. analyse: 直接按照题意模拟写个递归分治就行.比赛的时候总觉得这样暴力写会TLE,…
以下是OI省选前的数据结构与算法整理,可能还不是很全面.但是已经是全网相对比较全面的了.所有标记为“基础”“进阶”“中级”“提高”的知识为近些年来NOIp考察的内容,需重点掌握. 所有“高级”部分为NOI的考点,省选需要. 不分条的知识点则是省选知识点. 其他的一些算法和数据结构可能就太小众了,就参见Candy?或_rqy的博客,以及TopCoder等网站的教程吧. 每一小项前面的方括号是Markdown里面的checkbox,然而并不能用.悲し. Coder必备类 [ ] LaTeX [ ]…
题目来源:noi2018模拟测试赛(二十二) 毒瘤板题+提答场……真tm爽 提答求最大团,各路神仙退火神仙随机化八仙过海 题意: 题解: 支持双端插入的回文自动机板题 代码: #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<queue> #define inf 2147483647 #d…
题目来源:noi2018模拟测试赛(二十三)T3 san 为什么noi模拟赛里会做到省选原题啊…… 题意: Description 有n个人,简单起见把他们编号为1到n,每个人有三项指标分别是攻击力,防御力和血量.现在要进行n-1场比赛,每次在剩下的人里面随机地选出两个人进行比赛,当一个人有大于等于两项指标严格大于另一个人时,这个人获得胜利.每次比赛,胜者留下,败者淘汰. 现在请你求出所有可能成为冠军(留到最后)的人. Input 第1行有一个整数n,表示人数为n. 接下来n行,每行有三个整数$…
题目来源:NOI2018模拟测试赛(二十六) 题解: 首先由于这是个01串,所以反对称串的意思就是这个字符串的后半部分是前半部分的反转且翻转结果: 一个串出现有三种情况:在前半部分,在后半部分或穿过中间: 对于前两种情况,由于n很小,可以直接在AC自动机跑状压DP,对于第三种情况特殊处理一下,就是对于所有子串的所有前缀,判断以这个前缀为结尾能否构造出这个串,有则累加答案就好了,具体见代码. 代码: #include<algorithm> #include<iostream> #in…
题目来源:NOI2018模拟测试赛(二十六) 题解: 设a<b: 可以先考虑a=1的特殊情况,注意到后手的最优策略是跟着另外一个人取,取到最后剩余不到$a+b$时再看奇偶性: 那么很容易想到把所有石子按$\mod(a+b)$的余数分类: 1.余数<a:剩下的部分没用: 2.a≤余数<b:只要有则a必胜: 3.b≤余数<2a:要考虑奇偶性: 4.余数≥2a:只要有两个或以上则a必胜,有一个时情况3的为偶数则先手必胜,为奇数则a必胜,没有时情况3为偶数则后手必胜,否则先手必胜: 随便手…