自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 K叉哈弗曼树构造算法

运用了类似归并排序的思想除了一开始给数组排序的O(nlogn)时间外,之后每次构造K叉树时间复杂度为O(n)typedef long long ll;const int N=1e5+10;int a[N],b[N];ll hafuman(int k,int len){ //sort(a,a+len); int a0=0,b0=0,b1=0; int num; ll ans...

2018-07-31 16:51:21 447

原创 HDU-5884 Sort

用二分法寻找K,再用O(n)时间的K叉哈弗曼树算法求K是否符合要求#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<queue>using namespace std;t...

2018-07-25 08:39:53 124

原创 HDU-5883 The Best Path

在图中找一条欧拉回路,让路径上经过的点值异或和最大首先确定是否有欧拉回路,就是图连通,度数为奇数的点个数num==0||num==2接下来决定欧拉路径异或值大小的点只通过起点和终点决定如果num==0,起点终点固定,答案唯一,如果num==2,起点终点为一个点,在所有点中选然后选一遍最大值就可以了#include<iostream>#include<cst...

2018-07-24 20:44:48 147

原创 HDU-5878 I Count Two Three

暴力打表,把1e10内的符合要求的数都打出来,再二分查找#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;typedef long long ll;const ...

2018-07-24 20:17:31 156

原创 HDU-6242 Geometry Problem

很神奇的一道题,随机数大法给出n个点,要求一个圆心和半径,让不少于n/2的点在圆上,保证有这样的解,每个点在这样圆上的概率是1/2可以随机选三个点定位它们的圆心,那么这个圆心是我们要找的圆心的概率为1/8所以我们就不断地随机选三个点,求出圆心,再判断经过这个圆的点是否足够就可以了时间复杂度O(n*t),t多大看运气,只要运气不太差不会TLE还有n<=4时要特判,n==1时...

2018-07-23 15:03:38 222

原创 HDU-6230 Palindrome

题目中要求的串,可以概括为两个回文串的组合:_____ i ____ j _____以 i 和以 j 为中心的两个回文串拼接起来,注意 i 的回文串范围要覆盖 j,j 的回文串范围要覆盖 i设p[i]是以 i 为中心的回文串覆盖半径(不包括 i )那么要符合三个条件:j>i ; j<=i+p[i] ; i>=j-p[j] ;先用Manacher算法算出以每个点为中...

2018-07-23 11:08:06 248

原创 HDU-6231 K-th Number

把a数组复制到b数组里,给b数组排序然后用二分法遍历b[i],求所有符合要求的区间的第K值,大于等于b[i]的有多少(用尺取法,详见代码)如果>=m,那么b[i]应该取更大,否则b[i]应该取更小,就这样二分下去,直到l==r尺取法时间O(n),二分O(logn),总时间O(nlogn)#include<iostream>#include<cstdio&...

2018-07-23 09:04:15 120

原创 HDU-6237 A Simple Stone Game

给出一个数组a,问需要移动多少石子才能让所有a[i]%x==0,(x>1),a[i]==0时满足a[i]余任意x等于0首先可以确定所有a[i]的和sum%x==0,那么我们就缩小了x的范围,就是sum的因子并且如果x不是质数,那么x就可以用它的因子来替代,结果是一样的,所以我们只需要考虑x是质数的情况在给定x后,最少需要移动的石子个数怎么计算先用a[i]%x得到数组b[i],...

2018-07-23 08:52:57 240

原创 HDU-6235 Permutation

给出n,要求用1~n组成一个序列,并且p[i] % | p[i]-p[i-2] | = 0那么只要p[i]-p[i-2]都等于1就可以满足条件了,也很容易做到把1~n从中分成两段,然后分割插入进去,比如n=8:1,5,2,6,3,7,4,8#include<iostream>#include<cstdio>#include<cstring>#...

2018-07-23 08:39:47 298

原创 HDU-5869 Different GCD Subarray Query

需要用到的方法和知识:gcd,树状数组,离线查询题解链接:https://blog.csdn.net/saber_acher/article/details/52497104#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include&l...

2018-07-21 10:52:02 249

原创 HDU-5877 Weak Pair

首先对所有的a[i],外加k/a[i]离散化然后从根节点dfs,用树状数组维护路径上的数,对于经过的每个节点,查询小于等于k/a[i]的数的个数全部加起来就是答案#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cm...

2018-07-20 20:07:10 146

原创 HDU-5872 Seats

我实在搞不清楚这道题的题意,或者为什么这样算可以得到答案不过这样写就AC了#include <cmath>#include <cstring>#include <iostream>using namespace std;typedef long long ll;int main() { ll h, l, k; while (ci...

2018-07-20 18:06:24 238

原创 HDU-5876 Sparse Graph

给出n个点,和m条无向边,问n个点的无向完全图去掉这m条边后S点到其它点的距离(每条边为1)n最大为200000,m最大为20000,可以直接bfs,在第一层就可以走到大部分点,之后几层很快就会走完所有点问题在于要尽量减少每次宽搜遍历的点个数,否则会超时在搜索前可以先标记u点对于m条边可以通向的点,之后搜索就忽略这些点然后需要维护一个还没有到达过的点的集合,用一个数组就可以,搜索时...

2018-07-20 18:02:44 111

原创 HDU-5875 Function

可以想到对于n%m,如果每次取模m都比n小,那么最多log2n次,n将等于0就是说,在给定的L~R区间内,我们从左到右取模,如果能跳过比当前值大的数,直接定位到<=n的数,可以很快得到答案但是挺难做到,我们可以求其次,在n%a[i]结束后,下一个a[j]就找比a[i]小的第一个数,也可以较快得到答案用一个数组f[i]保存比a[i]小的下一个数的位置,可以用单调栈在O(n)时间内得...

2018-07-20 17:48:25 182

原创 HDU-6202 cube cube cube

就是一道暴力模拟魔方旋转的题目,因为限制只有三步,所以纯暴力dfs就可以先找出魔方的旋转数组,然后写函数按照旋转数组模拟旋转刚开始我以为只有12种旋转,后来发现有24种,因为懒得再找旋转数组,就写了整个旋转魔方的函数就是先以1面为顶,转12次,再以7面为顶转8次,再以6为顶转4次最后结果还行,能15ms过#include<iostream>#include&lt...

2018-07-18 08:30:32 206

原创 HDU-6194 string string string

求一个字符串中正好出现了K次的子串,可以用后缀自动机来做附上后缀自动机的应用:https://blog.csdn.net/clover_hxy/article/details/68059043以及代码出处:https://www.cnblogs.com/forever97/p/hdu6194.html本来套了个kuangbin模板,提交结果内存爆了,因为用的都是指针(64位系统指针占用...

2018-07-17 17:30:25 265

转载 后缀自动机模板

出自kuangbin模板#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;const int CHAR=26;const int MAXN=100000+10;...

2018-07-17 17:04:30 216

原创 HDU-6205 card card card

思路挺简单,先预处理差值,然后过一遍,用sum记录差值和如果sum<0,说明前面的都需要移走,就做标记,sum清零,然后继续#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using name...

2018-07-16 22:00:36 112

原创 HDU-6195 cable cable cable

emmmmm,找规律,每个信号源连接m-k+1个屏幕,从左到右排开就好了#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;typedef long long ll...

2018-07-16 19:36:40 206

原创 HDU-6200 mustedge mustedge mustedge

给出一个图,保证没有自环和重边,接下来有两种操作1:u,v 在u,v之间加一条边2:u,v 查询u,v路径的必经边的个数(就相当于桥) 给出图之后,先用Tarjan算法求出所有桥,还有Belong数组(标记每个点属于哪个强连通分量)接下来用dfs重新建图,实际上建出来是一个树,保存每个点的父节点,以及在树中的深度 接下来对于2操作,就是寻找u,v所在的点(强连通分量)的...

2018-07-16 18:29:51 233 1

原创 HDU-6201 transaction transaction transaction

题目大意是在图中找到一条路径,使得终点值减去起点值再减去路径花费最大可以转化为最短路问题,建立超级源点连接每个点,在建立超级汇点连接每个点,这些边权值都为0把每个城市之间的路径权值转化为v[b]-v[a]-C(路径长度),这样处理完用SPFA求源点到汇点最长路径就可以了#include<iostream>#include<cstdio>#include&l...

2018-07-16 18:08:12 171

原创 HDU-6198 number number number

我先暴力打表打出前10个数据接下来尝试用高斯消元求递推方程,在3个参数的时候得到了递推方程f(n)=4*f(n-1)-4*f(n-2)+f(n-3),前三个数是4,12,33接下来用矩阵快速幂求答案就OK了#include<iostream>#include<cstdio>#include<cstring>#include<algo...

2018-07-16 18:01:32 182

原创 HDU-6197 array array array

问一个长度为n的序列,去掉K个数后,能否形成最长上升子序列或者最长下降子序列所以就是求最长上升子序列的问题,求出两个序列的最大长度后,看看加上K能否>=n数据量是10^5,所以要用nlogn优化的LIS算法#include<iostream>#include<cstdio>#include<cstring>#include<alg...

2018-07-16 17:55:03 336

原创 HDU-6191 Query on A Tree

这题需要用到,dfs序时间戳,可持久化字典树dfs时间戳就是把一棵树转化成线性结构,每棵子树就是线上的一个区间,可以用ll,rr数组保存起来接下来就是在这个线性结构上构造可持续化字典树,之前没有学过的很难看懂这部分代码按这道题来说,我的理解就是:可持久化字典树可以把本来需要2^31*N的树,压缩为31*N的空间,并实现快速的区间查询每个数字在字典树上都可以看成一条路径,由010101010.......

2018-07-15 15:54:40 387

原创 HDU-6183 Color it

关于区间查询的问题,想到用线段树来做但需要先转化一下,每种颜色都建一个线段树,保存Y轴上的区间内最小的X的值最后查询时,统计每种颜色区间内最小的X是否在范围内就可以了这样建树需要空间为1e6*4*50,会爆内存,还需要再用动态线段树动态线段树就是原有线段树基础上,左右子节点的下标不固定了,而是按需求分配保存在l,r数组里#include<iostream>#include<cs...

2018-07-15 13:50:28 259

原创 HDU-6189 Law of Commutation

首先暴力打表找规律,发现当a为奇数时,答案必为1(以后碰到这种感觉的题,没思路就先打个表吧!)然后可以推出符合要求的b也不为奇数(因为a^b%m必为偶数,所以b^a%m也为偶数,得b为偶数)接下来再仔细推敲一下,发现a^b%m和b^a%m在很多情况下等于0(因为m=2^n的缘故)之前推出,a和b肯定是偶数,所以a和b中都含有2,当b>=n时,a^b将是m的整数倍,a>=n时,b^a也是...

2018-07-14 23:00:03 143

原创 HDU-6185 Covering

这个题明显是需要求递推式,但直接去看比较复杂可以先打表求出前10个的答案,然后用高斯消元来解递推式(可以暴力打表,或者有人用状压DP)假设递推式是一个四元方程,至于为什么也不大清楚(可能是操场是4*n的缘故)然后得到递推式f(n)=f(n-1)+5*f(n-2)+f(n-3)-f(n-4)因为1<=n<=10^18很大,所以用矩阵快速幂来解递推式,得到答案#include<ios...

2018-07-14 20:35:51 192

原创 高斯消元模板

const double eps=1e-6;const int N=100+10;double a[N][N];int gauss(int n,int m){ int col,row,mxr; for(row=col=1;row<=n&&col<=m;row++,col++) { mxr=row; for(int i=row+1;i<=n;...

2018-07-14 20:26:22 298

转载 矩阵快速幂模板

typedef long long ll;const ll MOD=1e9+7;const int N=4;struct node{ ll a[10][10];};node shu,ans,mp;//shu是输入的矩阵,ans是所求答案node matrix(node x,node y){ for(int i=1;i<=N;i++) for(in...

2018-07-14 20:23:52 137

原创 HDU-6188 Duizi and Shunzi

贪心法策略是:从小到大遍历数字如果这个数字和前两个数字剩下的可以组成顺子,就组成顺子然后剩下的全部组成对子这样就能得到最优解#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace st...

2018-07-14 18:47:18 121

原创 HDU-6186 CS Course

预处理每个位置前面所有数的运算和,以及后面所有数的运算和查询时将前面和后面运算就是答案#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;const int N=1e5+...

2018-07-14 18:46:08 104

原创 HDU-6182 A Math Problem

签到题,暴力解决因为怕溢出的问题,用除法运算得答案#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;typedef unsigned long long ll;int...

2018-07-14 18:44:05 169

原创 HDU-4738 Caocao's Bridges

很简单的一道题目,找出所有的桥,取其中最少的守卫数量输出有几个地方需要注意:如果图本来就不连通,输出0(不需要派人炸桥)如果找到的守卫数量为0,应该输出1(最少也应该派一个人)还需要有重边处理#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#inclu...

2018-07-06 10:47:01 203

原创 HDU-4635 Strongly connected

在图是简单有向图和图不是强连通图的条件下,问最多可以添加多少边简单有向图就是没有重边,并且没有自环的有向图,完全有向图就是最大的简单有向图先按照简单有向图的条件来,已经有了m条边,我们最多能添加ans=n*(n-1)-m条边然后再按不是强连通图的条件,图中至少应该有一个强连通分量的出度或入度为0先对给出的图缩点,然后统计每个强连通分量的出度入度,找出出度或入度为0且包含点最少的那个设分量点数量为m...

2018-07-06 09:46:19 172

原创 HDU-4612 Warm up

找出在无向图中加入一条边,使图中桥的数量最少是多少先缩点,找出各个强连通分量,找出的强连通分量个数-1就是桥的数量了缩点后重新建图,每个连通分量是一个点,由桥作为边连接这些点,这时候图就是一棵树了要想加入一条边,让桥最大数量减少,那么我们只需要找到树的直径,在直径两端加一条边,形成一个环详见代码#include<iostream>#include<cstdio>#inc...

2018-07-05 15:48:50 259

原创 POJ-3177 Redundant Paths

懒得写题解了:https://www.cnblogs.com/shenben/p/5839786.html感觉这题有个坑点,就是两个点之间可能有一条以上的边连着假如只有两个点,有两条边连着这两个点,按题意说,这个是不需要加边的,因为有两条不同的通路但结果是有重边的话,必须要去掉,否则WA#include<iostream>#include<cstdio>#include...

2018-07-05 11:03:27 243

原创 POJ-3694 Network

给出一个图,还有q个询问,每个询问给出一条边,问加上这条边之后,图中还有几个桥给出图后,先用Tarjan算法过一遍,中间对两个数组和一个值进行标记father数组保存父节点,bri保存这个点到父节点的边是不是桥,cnt保存桥的个数这样结束后我们得到了一个树形结构,所有的桥都在这个树中作为树边存在每当添加一条边时,树中就会形成一个环,这个环上的所有桥都不再会是桥接下来对于每个添加的边(u,v)进行l...

2018-07-05 09:51:19 149

原创 UVA-796 Critical Links

求无向图中桥的个数,用Tarjan算法桥就是图中的一条边,去掉这条边后这个连通块将会不连通一条边(u,v)是桥当且仅当满足(u,v)为树枝边,且Low[v]>DFN[u]#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cm...

2018-07-03 18:18:26 256

原创 UVA-315 Network

求无向图的割点个数,模板题首先要知道割点是什么,怎么找出割点1)当前节点为树根的时候,条件是“要有多余一棵子树”(如果这有一颗子树,去掉这个点也没有影响,如果有两颗子树,去掉这点,两颗子树就不连通了。)2)当前节点U不是树根的时候,条件是“low[v]>=dfn[u]”,也就是在u之后遍历的点,能够向上翻,最多到u,如果能翻到u的上方,那就有环了,去掉u之后,图仍然连通。具体怎么在Tarja...

2018-07-01 23:12:46 172

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除