01 2016 档案

摘要:我们考虑在1...n-1中选取三个数不重复的有多少种?答案是(n-1)*(n-2)*(n-3)种。 每三个数组成六种序列,只有一种单增。 #include<iostream>#include<cstdio>using namespace std;int n;int main(){ scanf("%d 阅读全文

posted @ 2016-01-30 14:31 ziliuziliu 阅读(117) 评论(0) 推荐(0) 编辑

摘要:看到这道题我们首先考虑线性筛。然而???2*10^9直接跪掉。 考虑每个因子i对答案的贡献,为[n/i]*i。那么?分块处理即可。 #include<iostream>#include<cstdio>using namespace std;long long x,y;long long ans=0; 阅读全文

posted @ 2016-01-30 08:40 ziliuziliu 阅读(138) 评论(0) 推荐(0) 编辑

摘要:容斥+莫比乌斯反演+分块大法。 #include<iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std;long long miu[50005];long long a,b,c,d,k,t;long 阅读全文

posted @ 2016-01-29 21:19 ziliuziliu 阅读(192) 评论(0) 推荐(0) 编辑

摘要:莫比乌斯反演?不知道有没有用到。 原式=∑(x=1...n)μ(x)∑(i=1..[n/x])d(i)∑(j=1..[m/x])d(j)。 对miu,d分别前缀和,再对d*d进行分块。 #include<iostream>#include<cstdio>#include<cmath>#include 阅读全文

posted @ 2016-01-29 21:18 ziliuziliu 阅读(111) 评论(0) 推荐(0) 编辑

摘要:首先为了满足买卖点全都在1到n的路径上,我们进行两次bfs(spfa),在第一次的时候顺便求出1到该点的路径上权值最小的点。 然后o(n)for出该点权值减去1到这一点路径上权值最小的点的权值。更新答案。 #include<iostream>#include<cstdio>#include<cstr 阅读全文

posted @ 2016-01-28 22:22 ziliuziliu 阅读(252) 评论(0) 推荐(0) 编辑

摘要:一个求最大值和次大值的问题。在更新的时候将两个子区间的最大次大值都算进去,排个序再装进去即可。#include#include#include#define maxn 800005using namespace std;struct tree{int left,right;int value1,va... 阅读全文

posted @ 2016-01-24 21:46 ziliuziliu 阅读(143) 评论(0) 推荐(0) 编辑

摘要:这题仿佛暴力都能过。。。我还是写的tarjan。纯粹是裸的找环,每个点所属的强连通分量只要大于一个点,依据定义就肯定有环。#include#include#include#include#include#define maxv 1005#define maxe 100005using namespa... 阅读全文

posted @ 2016-01-24 11:43 ziliuziliu 阅读(219) 评论(0) 推荐(0) 编辑

摘要:状压。!!!!这题神TM我调了不知道多久。。没带智商。考虑好状态之间的关系。数组开够。#include#include#include#includeusing namespace std;int dis[20][20],f[20][1dis[i][k]+dis[k][j]) && (i!=k) &... 阅读全文

posted @ 2016-01-23 18:42 ziliuziliu 阅读(120) 评论(0) 推荐(0) 编辑

摘要:线段树,数据水。。。成段更新区间,然后每次dfs整棵线段树。#include#include#define maxn 1000005using namespace std;struct tree{ int left,right; int value;}node[maxn];int father[ma... 阅读全文

posted @ 2016-01-22 22:23 ziliuziliu 阅读(194) 评论(0) 推荐(0) 编辑

摘要:满血复活。。。这题大赞出题人。数据出的真是好。两个要点:首先二维记录每个点每个标记的dis,然后发现有自环,果断放弃vis,然后还要判断:当距离相等但是另外一条线的挑战更多,那么还是要更新。#include#include#include#include#include#define maxv 13... 阅读全文

posted @ 2016-01-22 22:11 ziliuziliu 阅读(158) 评论(0) 推荐(0) 编辑

摘要:分类讨论~~~~~二进制一定要分出1来。#include#include#include#includeusing namespace std;long long f[205005],n,v;long long w[505],p[505],num[505];void work1(long long ... 阅读全文

posted @ 2016-01-08 19:34 ziliuziliu 阅读(111) 评论(0) 推荐(0) 编辑

摘要:trie树模板题。题目主要是看前缀,因此只要碰到染色节点就false就行了。#include#include#include#define root 1using namespace std;int cnt=0,cntnode=1;int child[1005][15],flag[1005];cha... 阅读全文

posted @ 2016-01-07 23:32 ziliuziliu 阅读(183) 评论(0) 推荐(0) 编辑

摘要:真是佩服出这题的人。1.首先基本思路:考虑对T与SUM-T分别进行背包,再min起来。为什么呢?难点在于SUM-T的是考虑有哪些数没有被选。2.然后数据范围???瞬间吓尿。幸好有出题人指点,考虑分治。3.然后??细节比较烦。对于abs的和T=0的特判需要注意。#include#include#inc... 阅读全文

posted @ 2016-01-07 22:38 ziliuziliu 阅读(240) 评论(0) 推荐(0) 编辑

摘要:多重背包问题。注意物品数可以为1#include#includeusing namespace std;int n,m,p[105],w[105],num[105];int t[1005],q[1005],cnt=0,dp[1005];int main(){ scanf("%d%d",&m,&n);... 阅读全文

posted @ 2016-01-06 20:33 ziliuziliu 阅读(112) 评论(0) 推荐(0) 编辑

摘要:基本树型dp。dp[i][j]中i表示某人,j表示该人来了没来。转移方程见程序。注意预处理:先初始化所有dp[i][1]为给定的权值。先将没有下属的人进队。#include#include#include#includeusing namespace std;int n,r[6005],fath[6... 阅读全文

posted @ 2016-01-06 19:04 ziliuziliu 阅读(243) 评论(0) 推荐(0) 编辑

摘要:感谢提供背包九讲的大大orzorz。。。。。其实把一个牵连背包问题转化成分组背包套(此题不需要)01背包即可。理由,作出的每种策略都是互斥的。这题我的代码很丑。。。。#include#include#include#includeusing namespace std;int v,m,w[65],p... 阅读全文

posted @ 2016-01-06 16:47 ziliuziliu 阅读(141) 评论(0) 推荐(0) 编辑

摘要:考虑一个01背包即可。#include#include#includeusing namespace std;int v,m,w[30],p[30];int dp[50005];int main(){ scanf("%d%d",&v,&m); for (int i=1;i=w[i];j--) d... 阅读全文

posted @ 2016-01-06 14:19 ziliuziliu 阅读(123) 评论(0) 推荐(0) 编辑

摘要:其实将整个链对折就得到一棵树。同样使用倍增表,考虑维护四个值:max,min,premax,submax,可以求解。也可以用线段树:主体更新和倍增法相同,同样在每个区间内记录以上四个值。小技巧:在返回时直接返回一个struct。#include#include#include#include#def... 阅读全文

posted @ 2016-01-04 15:18 ziliuziliu 阅读(142) 评论(0) 推荐(0) 编辑

摘要:orz CYZ。。。。我们考虑模仿kruskal的建造过程:将边排序,考虑到这样一个性质:在一个建到一半的最小生成树中,两点直接连的边的距离一定严格大于它们在最小生成树上的路径边权最大值(反之就不能连最小生成树的那条边),因此我们只要用一个并查集体现kruskal的过程,再维护每个子树的size,然... 阅读全文

posted @ 2016-01-03 19:30 ziliuziliu 阅读(273) 评论(0) 推荐(0) 编辑

摘要:考虑到数据范围不小。。。采用双端队列优化:如果当前距离小于队列头,则将当前结点push到队列头。再考虑判负环。。。其实入队次数貌似比较迷?反正多加几次可能问题不大。#include#include#include#include#define inf 12345678#define maxv 200... 阅读全文

posted @ 2016-01-03 16:03 ziliuziliu 阅读(213) 评论(1) 推荐(0) 编辑

摘要:这题卡空间,只好用dfs。。。加个最短路优(乱)化(搞):当前距离与下一个点的距离与下一个点到终点的最短路之和大于ans则直接剪掉。#include#include#includeusing namespace std;int n,map[20][20],ans=12345678;int d[20]... 阅读全文

posted @ 2016-01-03 15:19 ziliuziliu 阅读(277) 评论(0) 推荐(0) 编辑

摘要:参见之前的vani和cl2捉迷藏。。代码都是一样的。#include#include#include#include#include#define maxv 205#define maxe 3005#define inf 12345678using namespace std;struct edge... 阅读全文

posted @ 2016-01-03 11:48 ziliuziliu 阅读(136) 评论(0) 推荐(0) 编辑

摘要:可以裸最小费用最大流。只要相应人,机连边即可。#include#include#include#include#include#define maxv 805#define maxe 200005using namespace std;struct edge{ long long v,f,c,nxt... 阅读全文

posted @ 2016-01-03 11:45 ziliuziliu 阅读(144) 评论(0) 推荐(0) 编辑

摘要:这个有贪心,题中所要求的点一定在最小生成树的最长链上。代码长度。。。。hhd#include#include#include#include#include #include#define maxv 100005#define maxe 200005using namespace std;struc... 阅读全文

posted @ 2016-01-03 10:58 ziliuziliu 阅读(303) 评论(0) 推荐(0) 编辑

摘要:由题意,每条路径上只能选一个点,也就是求最小路径法覆盖=节点数-最大匹配。为了保证联通,我们需要做一个闭包,也就是floyd。#include#include#include#include#include#define maxv 205#define maxe 3005#define inf 12... 阅读全文

posted @ 2016-01-03 09:26 ziliuziliu 阅读(193) 评论(0) 推荐(0) 编辑

摘要:不写了。。。欧拉通路。读入太迷。#include#include#defineN101intmain(){chars[200];intdoor,de[N],odd,eve,n,m,p,cc,len,k;while(scanf("%s",s)!=EOF){if(s[3]=='O')break;scan... 阅读全文

posted @ 2016-01-02 15:56 ziliuziliu 阅读(118) 评论(0) 推荐(0) 编辑

摘要:欧拉回路模板题。。这个dfs其实蛮有趣的。因为欧拉回路的性质,每条边都经过一遍,所以。。。。即可。#include#include#include#define maxe 100005#define maxv 80005using namespace std;struct edge{ int v,n... 阅读全文

posted @ 2016-01-02 15:19 ziliuziliu 阅读(118) 评论(0) 推荐(0) 编辑

摘要:最大费用最大流。分为两个集合,流量为1,费用为给的值即可。#include#include#include#include#include#define maxv 202#define maxe 20005#define inf 12345678using namespace std;int ff,... 阅读全文

posted @ 2016-01-01 15:32 ziliuziliu 阅读(138) 评论(0) 推荐(0) 编辑

摘要:一看2s的时限,就神暴力就可以吧。。先跑spfa求出最短路,然后每次抹去一条边,再跑最短路,求出最大值即可。#include#include#include#include#include#include#define maxe 500050#define maxv 1005using namesp... 阅读全文

posted @ 2016-01-01 11:13 ziliuziliu 阅读(224) 评论(0) 推荐(0) 编辑

摘要:这个和货车运输没有区别。。。只不过换成了最小生成树。#include#include#include#include#include#define maxv 40005#define maxe 200005#define maxq 30005using namespace std;int n,m,x... 阅读全文

posted @ 2016-01-01 11:12 ziliuziliu 阅读(152) 评论(0) 推荐(0) 编辑

摘要:由于有m条边,考虑建一颗最大生成树,然后LCA求解问题。这题也是神TM多细节。。。#include#include#include#include#include#define maxv 40005#define maxe 200005#define maxq 30005using namespac... 阅读全文

posted @ 2016-01-01 09:45 ziliuziliu 阅读(119) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示