- 博客(24)
- 收藏
- 关注
原创 HNOI2015实验比较--树型DP
我看了一下,网上好像没有跟我一样做法的,而且我根本学不会那个做法。那我只好发个博客啦(做法也许有错)!题意有nnn个物品和mmm个条件,每个条件表示iii的权值小于或等于jjj的权值,每个jjj只会出现一次。 要求给每个物品分配一个权值,使得满足所有的条件,并且111到MAXMAXMAX的每个值都出现了(其中MAXMAXMAX指最大权值)。分析首先i=ji=ji=j的条件...
2018-03-13 22:03:03
245
原创 HNOI2015接水果--整体二分
题意给你一棵nnn个点的树和mmm条路径,每条路径有权值。接下来有qqq次询问,每次再给出一条路径,询问这条路径完全覆盖的路径中权值第kkk小的路径权值。做法考虑路径(u,v)(u,v)(u,v)会被哪些路径完全覆盖,那么就有两种情况: 1、uuu是vvv的祖先,那么完全覆盖它的路径(x,y)(x,y)(x,y)满足dfn[x]∈[1,dfn[w]−1]⋃[edn[w]+1,n]...
2018-03-08 16:47:58
426
原创 CQOI2011动态逆序对--cdq分治
题意:给出一个1~n的排列,按顺序删掉m个元素,求出每次删除操作之前序列的逆序对个数.做法:这题显然可以用树套树之类的工业结构维护,但是我怎么可能会呢.考虑离线cdq分治,可以把问题反过来,转化为每次添加一个元素,求添加后序列的逆序对个数.把每个元素看成平面上的点,x,y坐标分别是元素大小和插入位置,产生贡献的一对点则满足(x<x')!=(y<y').设f[i]是添加第i个元素后,包含...
2017-05-18 11:14:54
315
原创 NOI2014魔法森林--LCT
题意:求一条1->n的路径,使得路径上的MAXA+MAXB最小。做法:以a值从小到大对边排序,动态加边,维护一个最小生成树就行了。如果两个端点不连通,则直接加上,否则就把这个环上b值最大的边删掉,用LCT维护。PS:UOJ上居然还有hack单旋的,太坑了。#include<iostream>#include<cstdio>#include<algorithm...
2017-04-09 17:22:08
374
原创 POJ1811--miller rabin&pollard rho
好久以前写过这个题(吗),但是显然毫无意义,今天再写一遍吧。(玄学算法判断素数和质因数分解。)#include<iostream>#include<cstdio>#include<cstdlib>using namespace std;#define REP(I,ST,ED) for(int I=ST;I<=ED;++I)#define DREP...
2017-04-03 20:04:38
305
原创 迷之数论--扩展bsgs和扩展lucas
贴两个链接吧反正我也说不清楚。扩展bsgs:点击打开链接扩展lucas:点击打开链接留个代码纪念一下。#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<map>using namespace std;#define REP(I,...
2017-03-29 15:11:27
969
1
原创 SCOI2012喵星球的点名--后缀数组
求子串的问题,本来想找一道AC自动机的题做,结果这题的字符有10000种,会比较麻烦,所以考虑后缀数组。我部分细节处理感觉非常的暴力,所以非常的慢。。。。。。。。#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=200005;int...
2017-03-11 19:38:40
255
原创 HAOI2010软件安装--强连通缩点+树型dp
今天复习了一下强连通分量(显然之前就没学得好)。强连通分量一般用在环套树的有向图中,先把每个强连通分量缩点,然后把它当做普通树处理。双联通分量也顺便看了一下,但是感觉用处远远没有强连通分量大啊。借这道题来纪念一下强连通分量,希望以后有用上的时候。#include<iostream>#include<cstdio>#include<cstring>#incl...
2017-02-19 21:39:45
336
原创 SDOI2009Elaxia的路线--想法+dijkstra
题意:给出一个无向图和s1,t1,s2,t2,求出s1-t1和s2-t2的最短路,使得这两条路径的最大公共路径最长。做法:因为两点间最短路可能不唯一,所以不能直接构造。如果一条边u-v在s-t的最短路径中,那么d[s][u]+c[u][v]+d[v][t]=d[s][t]。所以预处理以s1,t1,s2,t2为原点的最短路径,再找出对s1,t1和s2,t2都满足上面式子的边,然后删去其他
2017-02-02 16:17:04
287
原创 POJ3468--Splay维护区间加标记
好久没写Splay了。#include#includeusing namespace std;typedef long long ll;const int maxn=100005;struct Splay_Tree{ ll sum[maxn]; int fa[maxn],ch[maxn][2],sz[maxn],val[maxn],add[maxn]; void push_up
2017-02-01 20:00:12
417
原创 AHOI2009中国象棋--巧妙dp
题目意思是在一个n*m(n,m考虑用dp,设三维dp[i][j][k],代表枚举到i行,有j列只有1个棋子,k列有2个棋子的方案数,那么放0个棋子的列数就是m-j-k了。在i行可以放0,1,2个棋子,那么我们模拟一下,就可以推出dp方程了。#include#includeusing namespace std;const int maxn=105,mod=9999973;int
2017-01-23 21:51:27
332
原创 ZJOI2009狼和羊的故事--dinic网络流
题意就是任意两个1和2都不能有路径相连通。做法是最小割,但是暴力增广会T4个点,而dinic没记cur数组会T2个点,开了以后速度飞快。。。。。。#include#include#include#includeusing namespace std;const int maxn=105,Maxn=maxn*maxn,inf=1e9,dir[4][2]={{1,0},{0,1},{
2017-01-22 20:26:55
293
原创 ZJOI2012网络--LCT强化练习
太强了!!!!!!!!#include#include#includeusing namespace std;const int maxn=10005,maxc=10;#define mp make_pairint val[maxn];struct Link_Cut_Tree{ int Max[maxn],fa[maxn],deg[maxn],ch[maxn][2]; boo
2017-01-21 21:35:17
296
1
原创 SDOI2008洞穴勘测--LCT入门
LCT真是太抽象了,sak(%%%)给我讲了一下,大概懂了但是还有很多存在漏洞的地方。显然,先发篇博客再慢慢看吧。。。。。。。。#include#includeusing namespace std;const int maxn=10005;struct Link_Cut_Tree{ bool rev[maxn]; int fa[maxn],ch[maxn][2]; void p
2017-01-19 21:58:08
298
1
原创 SCOI2010序列操作--线段树迷之维护
硬刚了一晚上终于刚完了,发篇博客纪念一下。#include#includeusing namespace std;const int maxn=100005;struct Seg_Tree{ int sum[maxn<<2],Max[maxn<<2][2],fuz[maxn<<2]; int Maxl[maxn<<2][2],Maxr[maxn<<2][2]; bool rev[
2017-01-16 22:18:14
372
原创 一般图匹配--带花树算法
思路很简单,但是写起来很迷。#include#include#include #includeusing namespace std;const int maxn=505,maxm=250005;int link[maxn],pre[maxn],fa[maxn],col[maxn],n;int Begin[maxn],Next[maxm],to[maxm],e;bool vis
2017-01-15 22:28:54
405
原创 UOJ164--历史最值维护
#include#includeusing namespace std;typedef long long ll;const int maxn=500005;const ll inf=1e18;struct Seg_Tree{ ll Add[maxn<<2],Fuz[maxn<<2],Maxadd[maxn<<2],Maxfuz[maxn<<2]; void create_tree
2017-01-15 21:28:08
314
1
原创 迭代FFT模板
显然,时间和空间都比递归的好#include#include#include#includeusing namespace std;typedef double lf;const lf pi=acos(-1);const int maxn=300005;complexa[maxn],b[maxn],c[maxn];int rev[maxn],n=1;void init(){
2017-01-02 10:11:13
545
原创 UVA12298--FFT(递归)
佳哥蓝书上的题,思路讲得很清楚了,这里注意一下取的牌点数为合数。#include#include#include#include#includeusing namespace std;typedef long double lf;const int maxn=300005;const lf pi=acos(-1);complexa[maxn],b[maxn],c[maxn],
2016-12-24 17:24:19
389
原创 AHOI2009维护序列--线段树lazy tag模板
区间加法和乘法,两个lazy数组同时维护。。。。。#include#includeusing namespace std;typedef long long ll;const int maxn=100005;ll mod;struct Tree{ ll sum[maxn<<2],add[maxn<<2],mul[maxn<<2]; void Mod(int p){ sum[p]
2016-12-14 23:05:56
320
原创 ZJOI2008树的计算--树链剖分裸题
第一次写树链剖分。。昨天晚上看到JMCDY(%%%)在不屑地写这道题,我便写了一波。dfs的时候top的位置写错了。。。找了好久,迷之错误。#include#include#includeusing namespace std;const int maxn=30005,inf=0x3f3f3f3f;int Max[maxn*4],val[maxn*4],Maxans,Sumans
2016-12-08 20:49:03
575
原创 HNOI2002跳蚤--容斥原理
题目描述:读入n,m两个数,假设一个合法的数列是n+1位,且前n位不大于m,第n+1位为m。对于每一个数列,跳蚤可以选取任意一个数列中的数k,往左或右走k步(可以走多次),若使用这一个数列跳蚤可以到达左边一步的位置,那么这一个数列就是可以完成任务的数列。现在需要求出可以完成任务的数列的总数。分析:题目需要找出所有能够到达左边一步位置的方案总数,能够到达左边一步,就相当于数列中所有数的最大公约数
2016-10-16 21:25:28
616
原创 块状链表
#include#include#include#includeusing namespace std;struct node{//建立一个块状链表 struct node *next,*last; vectorlist; node(){ next=NULL; list.clear(); }}*h;int sqrtn;void GET(node *p){//输出整
2016-05-17 08:59:58
403
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人