自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

__water

追逐梦想.

  • 博客(24)
  • 资源 (1)
  • 收藏
  • 关注

原创 5687字典树

动态开点#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>#include <cstdlib>using namespace std;struct node{ int val; struct node *next[26];}*head;void Insert(char

2016-09-28 23:37:50 180

转载 树链剖分(转)

树链剖分就是把边哈希到线段树上的数据结构。 实现的话,用两个dfs处理数数的信息,重边以及轻边,然后就是一些线段树的操作了。 以下是一些概念: 记siz[v]表示以v为根的子树的节点数,dep[v]表示v的深度(根深度为1),top[v]表示v所在的重链的顶端节点,fa[v]表示v的父亲,son[v]表示与v在同一重链上的v的儿子节点(姑且称为重儿子),w[v]表示v与其父亲节点的连边(姑且称

2016-09-27 19:30:15 163

原创 5904 LCIS

比赛的时候,被卡掉了,坑,O(n)转移吧 以下超时代码#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int a[100005],b[100005];int has[1000005],has1[1000005];i

2016-09-26 00:40:40 192

原创 5902 xjb模拟

每次选3个数,取两个gcd,删掉一个,问有多少gcd的可能 所以可以先处理出,两两gcd,然后再枚举全部的gcd的可能,将两两gcd的结果再和其他a[i]继续gcd#include<cstdio>#include<set>#include<algorithm>using namespace std;int a[505];int main(){ int t;scanf("%d",

2016-09-26 00:06:44 233

原创 poj3252 数位dp

将原本10进制的数位,改成2进制的数位转移就好了#include <cstdio>#include <cstring>#include <iostream>using namespace std;typedef long long ll;ll dp[35][35][35];int bit[12];ll dfs(int pos,int cn0,int cn1,int lim,int z)

2016-09-20 23:57:28 438

原创 poj1651 区间dp

状态方程 :dp [i] [j] 是区间 [i , j] 已经全部取完,只剩下 i j所剩的最小代价。 状态转移 :dp [i][j] = min (dp [i][j], dp[i][k] + dp[k] [j] + a[i]*a[k]*a[j])#include <cstdio>#include <cstring>#include <iostream>using namespace std

2016-09-20 23:54:55 335

原创 spoj10606 数位dp

define c(x) (x==0?1:x==1?2:1) define o(x) (x==0?1:x==1?1:0) define p(x) (x==0?1:x==1?0:1) 这三个地方的时候需要(….) ,因为define定义就在下文的c(x)处直接替换,这样会导致优先级的错误。#include <cstdio>#include <cstring>#include <iostrea

2016-09-20 19:44:26 388

原创 hdu5894组合数学

其答案是C(n-mk-1,m-1)/m*n 考虑一张桌子先坐上一个人,那么就只剩下n-m*k-1个位置能做人,且第一个人有n个位置可以选那么方案数就是n*C(n-mk-1,m-1) ,因为这里的人是无差别的。比如有3个人,假设他们坐的位置是(2,5,8),那么,(2,5,8),(8,2,5)是重复计算的,还要除以m。#include<iostream> #include<cstdio>

2016-09-19 21:45:56 300

原创 组合数取模

const ll p=1e9+7; ll n,m,k;ll quick_mod(ll a, ll b) { ll ans = 1; a %= p; while(b) { if(b & 1) { ans = ans * a % p; b--;

2016-09-19 19:47:53 521

原创 hdu5900 区间dp

题意:nn 个pair#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring>#include<algorithm>#include<vector> using namespace std; typedef long long ll;pair<int,ll> q[305];ll dp[

2016-09-19 19:11:48 176

原创 数位dp,hdu5898

includeincludeincludeincludeincludeincludeincludeincludeusing namespace std; typedef long long ll; int bit[20]; ll dp[20][20][20]; ll dfs(int pos,ll cn1,ll cn2,int lim,int z) { if(pos==-1)

2016-09-19 09:47:47 209

转载 求1e11以内的素数个数

#include<cstdio> #include<cmath> using namespace std; #define LL long long const int N = 5e6 + 2; bool np[N]; int prime[N], pi[N]; int getprime() { int cnt = 0; np[0] = np[1

2016-09-18 21:26:37 2158

转载 网络流

第一步,计算可增加流量 设某一增广路径上的节点为(a1,a2,a3,a4,….,an) 如果(u,v)是正向边,则增加流量d = min{ c(ai,aj) - f(ai,aj) | j = i +1, i =1,2,3…,n-1} 如果是逆向边,则增加流量d = min{ f(ai, aj) | j = i +1, i =1,2,3…,n-1} 第二步,更新流量 如果(u,v)是正向边,

2016-09-18 11:57:11 171

原创 欧拉回路+欧拉路径(hdu1116)

欧拉路径:从某结点出发一笔画成所经过的路线叫做欧拉路径。 无向图中欧拉路径,就是所有点的度都是偶数,除了两个点度为奇数外。 有向图中欧拉路径,就是所有点的度都一样,并且有且仅有两个点,其中一个点的入度=本身的出度+1,另一个点的出度=本身的入度+1。 欧拉回路:在欧拉路径的基础上又回到起点。 无向图中欧拉回路,就是所有点的度都是偶数 有向图中欧拉回路,就是所有点的入度=本身的出度

2016-09-16 10:19:25 271

原创 区间dp(codeforces245H)

区间dp, 一般都为第一重for循环枚举长度,然后枚举区间,进行状态转移。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;typedef long long ll;#define INF 0x3f3f3f3fbool c[5005][5005]={0};

2016-09-15 10:19:06 478

原创 数位DP

dfs求[0,n]有多少个符合的,先把n换成数位形式。 pos:现在处理到哪一位。 s:搜索到目前为止,之前的状态 limit:是否到达边界,如果没到这一位只取到9,否则只能取到bit[pos]。 z:前导0标记,也就是是否前面的都是0,有些情况需要特殊判断。 一般情况下dp数组开二维,dp[cur][s]为e和z都为0的情况,因为e和z都为0的情况比较多。 当

2016-09-09 18:47:39 270

原创 hdu1198 并查集

#include<cstdio>#include<cmath>#include<cstring>#include<iostream>#include<algorithm>#include<queue>#include<string>using namespace std;#define INF 0x3f3f3f3ftypedef __int64 ll;int f[2505];i

2016-09-09 15:39:59 253

原创 hdu1162最小生成树

#include<cstdio>#include<cmath>#include<cstring>#include<iostream>#include<algorithm>#include<queue>#include<string>using namespace std;#define INF 0x3f3f3f3ftypedef __int64 ll;struct node{

2016-09-09 09:45:03 277

原创 hdu1102 最小生成树

#include<cstdio>#include<cmath>#include<cstring>#include<iostream>#include<algorithm>#include<queue>#include<string>using namespace std;#define INF 0x3f3f3f3ftypedef __int64 ll;struct node{

2016-09-09 09:25:56 437

原创 中后求前

#include <cstdio>#include <cstring>int post[100],in[100];void dfs(int rt,int l,int r){ int i; for(i=l; i<=r&&in[i]!=post[rt]; i++); printf("%d ",in[i]); if(l<i) dfs(rt-r+i-1,l,i-1);

2016-09-08 19:31:36 209

原创 前中求后

#include <cstdio>#include <cstring>char pre[100],in[100];int dfs(int rt,int l,int r){ int i; for(i=l; i<=r&&in[i]!=pre[rt]; i++); if(l<i) rt=dfs(rt+1,l,i-1);//访左 if(i<r) rt=dfs(rt+1

2016-09-08 18:40:43 152

原创 vector

unique() 函数,把vector中重复的数字移到后面,并不是删除,返回第一个重复数字所在的位置。 想要删除还需要借助erase()函数。sort(qq.begin(),qq.end());qq.erase(unique(qq.begin(),qq.end()),qq.end());

2016-09-04 17:16:42 188

原创 并查集(删除节点)

删除节点,就是把原先的节点设置为虚点,然后把点的位置用num数组指向新的位置。#include<cstdio>#include<algorithm>#include<cmath>#include<iostream>#include<set>using namespace std;typedef long long ll;int num[10005],fa[300005];int _f

2016-09-04 17:13:45 2275

原创 最短路spfa CF20C

邻接表78ms#include<cstdio>#include<queue>#include<vector>#include<algorithm>using namespace std;typedef long long ll;int n,m;struct node{ int to,next; ll val;}edge[200005];ll d[100005];i

2016-09-01 16:42:43 227

umlstar5.0.2版本

适用于大学生uml课程中staruml建模学习,适用于大学生uml课程中staruml建模学习,适用于大学生uml课程中staruml建模学习

2018-04-18

空空如也

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

TA关注的人

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