摘要: 题意 有一部电梯,最初停在1层。 电梯有4个按键,上升a,b,c层,回到一层。 求从一层出发。能到达1~h的哪些楼层。 (h<=1018,a,b,c<=105) 题解 这种h能大的图论,一眼就知道是同余类。 以模a[1]的余数为下标建立数组,数组的意义是模a[1]为下标的最小的能到达的值。 显然之后 阅读全文
posted @ 2018-07-28 19:47 Xu-daxia 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 题意 题意是给你一张 NMNMNM 的图,每个点有黑色和白色,初始全为白色,每次可以把一个相同颜色的连续区域染色,求最少的染色次数;(n,m<=50) 题解 转化为最短路。对于每一个点与它相邻的相同颜色的点连权值为0的边,对于颜色不同的点连权值为1的点。从每一个点跑单源最短路,把到W点的距离和到B点 阅读全文
posted @ 2018-07-28 19:38 Xu-daxia 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 题意 哇,太长了。 题解 显然,树的直径不唯一但一定相交并且各个·直径的中点汇聚于同一处。 进一步得到一个推论,任意一个直径上求出的偏心距都相等。 原题中(n<=100)我们发现n的范围有点小。直接上暴力。 floyed预处理一下。找到树的直径。 暴力枚举树网的核再暴力枚举偏心距(至于具体怎么枚举看 阅读全文
posted @ 2018-07-28 12:01 Xu-daxia 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 题意 裸的仙人掌直径。 题解 先考虑基环树的直径:先算出每颗“树”的直径,再在环上跑DP 再考虑仙人掌的直径:把每个基环树缩成一条边,边长为基环树深度。 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include< 阅读全文
posted @ 2018-07-28 10:33 Xu-daxia 阅读(376) 评论(0) 推荐(0) 编辑
摘要: 题目大意 给出若干颗树用最少的边把它们连成一个无向连通图,同时使图的直径最小。输出最小直径。 题解 我们定义树的半径为(树的直径+1)/2。符合题意的连接方式为。所有树的“中点”连在直径最长的树的中点上。 此时在判断最长直径即可。注意:有三种情况可以使直径最长。 1 #include<iostrea 阅读全文
posted @ 2018-07-28 10:19 Xu-daxia 阅读(403) 评论(0) 推荐(0) 编辑
摘要: 1 #include<stdio.h> 2 bool ex[4194304],v[4194304]; 3 int a[4194305],n,al; 4 void dfs(int x){ 5 if(v[x])return; 6 v[x]=1; 7 if(ex[x])dfs(al^x); 8 for(i 阅读全文
posted @ 2018-07-28 10:06 Xu-daxia 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 题目描述 一些公司将在Byteland举办商品交易会(or博览会?)。在Byteland有 nnn 个城市,城市间有 mmm 条双向道路。当然,城镇之间两两连通。 Byteland生产的货物有 kkk 种类型,每个城镇只生产一种。 为了举办商品交易会,你必须至少带来 sss 种不同类型的商品。将货物 阅读全文
posted @ 2018-07-28 09:31 Xu-daxia 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 题目描述 RAMESS知道很多关于树的问题(无循环的无向连通图)! 他创建了一个新的有用的树的划分,但他不知道如何构造它,所以他请求你的帮助! 划分是从树上的边中分裂出一些简单的路径,使得每个两条路径都具有至少一个公共顶点。树的每一个边都应该在一条路径上。 帮助RAMESs,找到这样的树的划分,或判 阅读全文
posted @ 2018-07-28 09:18 Xu-daxia 阅读(1738) 评论(0) 推荐(0) 编辑
摘要: 题解 用一个矩阵来表示一个图的边的存在性,即矩阵C【i,j】=1表示有一条从i到j的有向边C【i,j】=0表示没有从i到j的边。这个矩阵的k次方后C【i,j】就表示有多少条从i到j恰好经过k条边的路径。 在此题中我们赋予边权值并把矩阵乘法中的+改为min这样这个矩阵的k次方后C【i,j】就表示从i到 阅读全文
posted @ 2018-07-28 09:03 Xu-daxia 阅读(377) 评论(0) 推荐(0) 编辑
摘要: 单调队列 求长度为M的区间内的最大(小)值 单调队列的基本操作,也就是经典的滑动窗口问题。 求长度为M的区间内最大值和最小值的最大差值 两个单调队列,求出长度为M的区间最大最小值的数组,分别求最大最小值。 求边长为a的正方形内最大值和最小值的最大差值([HAOI2007]理想的正方形) 一个大体的思 阅读全文
posted @ 2018-07-25 08:40 Xu-daxia 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 题目贼长 大意是你有n个线段,每一秒你要拿出来最长的一个线段切成两段长度为[p*u](向下取整)和u-[p*u]两段(其中u是线段长,p是一个大于0小于1的实数)没被切的线段长度加q(0<q<200)。问m秒后的n+m条线段的长度(1≤n≤100000,1<=m<=7000000) 题解 乍一看是堆 阅读全文
posted @ 2018-07-22 17:31 Xu-daxia 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 题意 给出第一象限的n个点,有m次询问,每次询问一个矩形中的点的个数.(0<=n,m<=500000,0<=xi,yi<=10000000) 题解 一眼望去不可做。 用二位前缀和的思想,一个矩形可以用以坐标轴为一对临边的四个矩形加减得到。 考虑离线,离散化。所以我们要求的只是若干个以坐标轴为一对临边 阅读全文
posted @ 2018-07-22 17:11 Xu-daxia 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 题目描述 Caima王国中有一个奇怪的监狱,这个监狱一共有P个牢房,这些牢房一字排开,第i个紧挨着第i+1个(最后一个除外)。现在正好牢房是满的。 上级下发了一个释放名单,要求每天释放名单上的一个人。这可把看守们吓得不轻,因为看守们知道,现在牢房中的P个人,可以相互之间传话。如果某个人离开了,那么原 阅读全文
posted @ 2018-07-17 10:28 Xu-daxia 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 #include<cstdio> 6 using namespace std; 7 const int N=500100; 8 in 阅读全文
posted @ 2018-07-13 19:17 Xu-daxia 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 #include<cmath> 6 using namespace std; 7 const int N=200020; 8 int 阅读全文
posted @ 2018-07-13 16:57 Xu-daxia 阅读(231) 评论(0) 推荐(0) 编辑