自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 bzoj1003(dp+最短路spfa)这才是省选的题

设f[i]为1~i天的最少花费,那么dp[i]=min(cost[1,i],min{dp[j]+cost[j+1,i]+K,1≤ji})cost[i][j]表示一条在 i - j 时段保持畅通的运输路线的最短距离,(当时不能到的点置为b【i】=false)然后就是DP。关键是cost[i][j]直接暴力求出每条边可不可用就可以直接SPFA了,来局昆特牌吗,亲。#includ

2016-06-30 17:38:03 346

原创 noip2009靶形数独(优化搜索顺序+位运算(只是常数优化,快一点))

搜索,如果先从密集的地方开始搜索,会好一点,显然是这样,这道题就利用了这一点,找较密集的行先搜索位运算,用一个数字来代表这一行放了哪些下面两种思路都过了,第一种稍微快一点,但不如第二种直观,实际上两种就差几十ms而以#include#include#includeusing namespace std;const int sc[10][10]={0,0,0,0,0,

2016-06-30 08:23:17 411

原创 矩阵取数游戏noip2006(c++ BigInteger的第一次运用)---重点!!

今下午对c++BigInteger进行了初步的了解同时,经过这次,我才深深的体会到了c++的灵活之处1.对Biginteger的初步认识2.对c++一些关键字的初步认识3.对vector的一点长进和对这些容器的感觉整体框架加深4.对operator的认识又加深了5.熟悉了对c++字符串的一些处理一下将在注释中标明#include#include#incl

2016-06-29 18:27:34 1116 3

原创 待解决问题汇总(上日程)

c++ static的意义BigInteger中this的意义在operator当中各种const的意义sscanf的意义,使用方法c++字符串处理的一系列问题{}

2016-06-29 16:20:13 385

转载 刘汝佳biginteger

#include#include#include#includeusing namespace std;struct BigInteger { static const int BASE = 100000000; static const int WIDTH = 8; vector s; BigInteger(long long num = 0) { *this =

2016-06-29 15:29:11 1394

原创 玛雅游戏!!!!(爆搜!!神代码题)

过了,竟然过了;感觉做这种代码题,最后ac了的感觉真好注意判重,第一次没有一个判重就tle了一次然后,这题让我对c++的二维数组传参有了更深的认识,其实二维数组的传参就是传的地址,更改的就是他本身的值#include#include#include#include#includeusing namespace std;struct aa{ int x,y,g;}an

2016-06-29 11:37:40 415

原创 vijos1022(强联通分量模版题)

#include#include#includeusing namespace std;bool a[500][500]={false},s[500]={false};int n,low[500]={0},dfn[500]={0},sta[500009]={0},top,ans,id;void dfs(int u){ dfn[u]=low[u]=++id; sta[++top]

2016-06-29 07:55:14 304

原创 八数码sb(曾经的神题)题

记得以前这种题真不会做现在一看,真水,或许做了四字连棋之后,这个难度的就直接不惧了棋盘的题,hash(取模)判重即可注意const定义数组,直接用‘,’隔开,大括号和逗号来隔,没有‘()’!!!!!!!!!!!!!!!!!!!!!!!!!const int ans[4][4]={0,0,0,0,    0,1,2,3,    0,8,0,4,    0,7,6,

2016-06-28 18:50:33 270

原创 codevs1004(bfs+hash判重)

本地测试没有问题,codevs却和本地测的结果不一样,可能是编译环境不同吧!然后为了判断我的程序是否正确,找了题解来对拍,多了一会,停了。。。。然而最后发现题解竟然错了。。。。(codevs数据真弱。。。)换了几个对拍后,确定没有问题#include#include#include#include#includeusing namespace std;const i

2016-06-28 18:03:15 744

原创 codevs2645(又写了一遍spfa,有注意事项)

#include#include#include#include#include#define inf 0x3f3f3f3fusing namespace std;struct aa{ int to,pre,v;}edge[1000009];int n,m,head[1009],p[1009],tot,dis[1009];bool b[1009];void addedge

2016-06-28 15:50:19 261

原创 hdu1573(中国剩余定理,在区间内解的数量)

求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], …, X mod a[i] = b[i], … (0  Input输入数据的第一行为一个正整数T,表示有T组测试数据。每组测试数据的第一行为两个正整数N,M (0 表示X小于等于N,数组a和b中各有M个元素。接下来两行

2016-06-28 09:53:09 1005

原创 hdu3575(中国剩余定理,注意特殊情况处理)

#include#include#include#include#define ll long long using namespace std;ll n,m[10009],a[10009];void exgcd(ll a,ll b,ll &d,ll &x,ll &y){ if (b==0){d=a;x=1;y=0;return ;} exgcd(b,a%b,d,y,x);y

2016-06-28 08:49:44 470

原创 poj2891(中国剩余定理模版::不要求模数互质)

#include#include#include#define ll long long using namespace std;ll k;void exgcd(ll a,ll b,ll &d,ll &x,ll &y){ if (b==0){d=a;x=1;y=0;return ;} exgcd(b,a%b,d,y,x);y-=x*(a/b);}int main(){ w

2016-06-28 07:53:02 591

原创 中国剩余定理模版

int china_mod(intmod[],inta[]){ int lcm,i,ans,Mi,x,y; lcm=1; for(i=0;i<n;i++) lcm*=mod[i]; ans=0; for(i=0;i<n;i++) { Mi=lcm/mod[i]; exgcd(Mi,mod[i],d,x,y); ans

2016-06-27 21:34:26 217

原创 食物链(并查集,分点)

食物链完全自己做的,智商瞬间++,由此发现只要肯想,就能做出来的,还是要逼自己使劲想果然,并查集稍微难一点的就是一个点分为各种情况的多个点,然后在相对的点对中建立关系再进行判断,其实可以将合并等赋予一定的意义,便于做并查集的题。其实就是想方法转化啊!!!至于本题:两个在一个集合代表同一个物种,x+n代表x所吃的物种,x+2*n代表吃x的物种(因为一共就只有三种,并且关系是循环的

2016-06-27 18:55:27 545

原创 邻接表拓扑排序,保证从小到大输出(未测试)

#include#include#include#include#include#includeusing namespace std;const int N=100009;int head[N],tot,pre[N],edge[N],n,m,b[N],cnt[N],a[N];void add(int x,int y){ edge[++tot]=y;pre[tot]=head

2016-06-27 16:53:03 753

原创 bzoj1093(强联通分量+缩点+dp记忆化搜索(算是乱搞找方法吧!))

先强连通缩点,然后重新构图,然后找出包含点数最多的链,统计个数即可,可以用拓扑排序搞~ pS:重新构图时有重边,然后导致统计方案数的重复注意缩点构图时,重边的情况处理#include#include#includeusing namespace std;const int N=100009;struct aa{ int to,w,pre;}edge

2016-06-27 16:50:51 289

原创 hdu1285(邻接矩阵写拓扑排序)

评了好几次,有迷之错误!#include#include#include#includeusing namespace std;int n,map[1009][1009],ans,m,cnt[1009];int main(){ while(scanf("%d%d",&n,&m)!=EOF) { int x,y; mems

2016-06-27 12:53:47 492

原创 codevs爱在心中(强联通分量,缩点,求出度为0的点)缩点模版

#include#include#includeusing namespace std;int head[100009],tot,dfn[100009],low[100009],sta[1000009],top,n,m,pre[300009],edge[300009];int size[100009],ct[100009],p[100009];int ans=0,id=0;boo

2016-06-27 10:48:05 291

原创 hdu1269(强联通分量模版)

注意事项在代码中#include#include#includeusing namespace std;int head[100009],tot,dfn[100009],low[100009],sta[1000009],top,n,m,pre[300009],edge[300009];int ans=0,id=0;bool s[100009],b[100009];void a

2016-06-27 09:11:11 236

原创 poj2480(欧拉函数,必须回顾的题)

欧拉函数的思想!!!!刚开始写跪了,一直wa,太晚了,就只好先这样了#include#include#include#include#define ll long long using namespace std;ll n,num[90000];ll phi(ll x){ ll ans=1; for (ll i=2;i*i<=x;i++) { if (x%i) c

2016-06-26 22:42:55 732

原创 线性筛求质数模板

#include#include#includeusing namespace std;int pri[10000];bool b[1000]={false};int main(){ int n=100; for (int i=2;i<=n;i++) { if (!b[i]) pri[++pri[0]]=i; for (int j=1;j<=pri[0]&&i*pr

2016-06-26 18:33:17 385

原创 bzoj2818(改为线性筛求欧拉函数的模版)

线性筛模版!!!#include#include#include#include#define ll long long using namespace std;ll n,phi[10000009]={0},sum[10000009]={0},pri[10000009];bool b[10000009]={false};int main(){ scanf("%lld",

2016-06-26 18:17:25 301

原创 bzoj2818(欧拉函数的应用!!!!!!!!!!!!!!)

给定整数N,求1数对(x,y)有多少对.枚举每个素数,然后每个素数p对于答案的贡献就是(1 ~ n / p) 中有序互质对的个数而求1~n中有序互质对x,y的个数,可以令y >= x, 当y = x时,有且只有y = x = 1互质,当y > x时,确定y以后符合条件的个数x就是phiy所以有序互质对的个数为(1 ~ n/p)的欧拉函数之和乘2减1(要求的是有序互质对,

2016-06-26 17:46:18 400

原创 noi2010能量采集(在网格点中互质的特点)

首先,如果两个点是互质的话,那么从这个点连线到(1,1)是没有与格点的交点的由此深入,总结一下就是,这个点与(1,1)连线与格点的交点的个数(包括1,1这个点)为gcd(i,j)知道这个结论,轻易推出此题现在只有80分的代码#include#include#include#include#define ll long long using namespace std;

2016-06-26 17:00:13 264

原创 bzoj3505(排列组合)

一直对排列组合有点头疼,总是有情况没有考虑到考虑补集,先把答案赋为c(n*m)(3),然后减去三点共线的情况。首先三点在一条水平或竖直的直线上非常好处理。直接减去c(n)(3)*m+c(m)(3)*n即可。然后考虑不斜着的情况。我们枚举一下边上两个点的横纵坐标之差(i,j)。那么中间的点可选的位置就是gcd(i,j)-1;然后再乘上这种直线的条数即可。注意要先处

2016-06-26 16:46:43 427

原创 独自poj2115(扩展欧几里德)

像扩展欧几里德的题啊,稍微变变形,把什么什么移到左边,什么移到右边,就这样然后套板子即可注意long long 运算的一些特殊情况k=1但是改为k=1ll所以这些特殊情况要积累#include#include#include#include#define ll __int64using namespace std;ll a,b,c,x,y,

2016-06-26 15:20:30 261

原创 poj3070(矩阵快速幂,矩阵乘法)

求一个巨大的裴波那契数列,非常不可思议地竟然可以把斐波那契数列优化到O(log n*2^3)的复杂度同时,用结构体记录矩阵,通过operator对矩阵乘法*,进行重定义返回结构体,以下是矩阵结构体模版同时利用快速幂的做法,来对矩阵的乘法来进行复杂度降维!#include#include#include#include#includeusing

2016-06-26 12:34:54 382

原创 poj2516(最小费用最大流模版)

首先就这题而言,各k互不影响,可以分开来算,累加即可对于构图来说,以后可以源点s=0,汇点t=n+m,其中一组点是1~n,另一组n+1~n+m,注意可以这样构图对于最小费用最大流,要用spfa来做最短路径,只需记录路径即可#include#include#include#include#include#define N 130using namesp

2016-06-25 18:34:53 363

原创 二分图最大权匹配(费用流做法)

[求最小(大)权匹配的费用流建模方法]求最小(大)权匹配,可以用最小(大)费用最大流的方法。和二分图最大匹配的构图方法类似,添加附加源S和附加汇T,从S向二分图X集合中每个顶点连接一条权值为0,容量为1的有向边,从Y集合中每个顶点向T也连接一条权值为0,容量为1的有向边。然后把原有的边变成容量为1,权值不变的有向边。求从S到T的最小(大)费用最大流,就能求得最小(大)权匹配。

2016-06-25 16:27:09 1097

原创 codevs1022覆盖(二分图最大匹配)

因为,一个点肯定与他旁边的点相连,所以根据横纵坐标只和可以分成单数和双数两个集合,正好构成二分图然后,一个点和挨着它可行的点连边。再直接最大匹配就可以了#include#include#includeusing namespace std;const int qx[2]={-1,0},qy[2]={0,-1};int n,m,id1=0,id2=0,match[500

2016-06-25 13:02:27 501

原创 bzoj1191(最大匹配,但不完全一样)

因为要求连续,所以只要到一个位置不能扩展出增广路时,就直接返回答案就行并且由此得出一个匈牙利算法的性质:在遍历过程中,只要已经遍历过的节点能扩展出增广路,那么在之后的扩展中,他也一定在匹配的节点集 中,但是二分图另一个节点集则可能会出现变化#include#include#include#include#includeusing namespace std;int

2016-06-25 11:57:24 443

原创 vijos P1212Way Selection(简单的建图)

注意,double的输入输出一定要用 %lf  !!!!!!!!#include#include#include#include#includeusing namespace std;int r,aa,t,match[2009]={0};double x[2009],y[2009],v[2009],xx[2009],yy[2009];bool a[2009][2009

2016-06-25 11:06:01 513

原创 匈牙利算法模版(poj1469)

#include#include#include#includeusing namespace std;int ss,n,p,match[509];bool a[509][509],use[509];bool dfs(int i) { if (use[i]) return false; use[i]=true; for (int j=1;j<=n;j++) if (a[

2016-06-25 09:36:42 370

原创 sdoi2008(欧拉函数)

考察了欧拉函数在数学上的特点顺便练了一下代码#include#include#include#includeusing namespace std;int phi[100009],n;void getphi(){ phi[1]=1; for (int i=2;i<n;i++) if (!phi[i]) { for(int j=i;j<n;j+=i)

2016-06-24 11:25:59 279

原创 文艺平衡树(splay旋转操作)

您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 #include#include#include#includeusing namespace std;const int maxn=300009;int ch[maxn][2],fa[m

2016-06-24 09:41:03 320

原创 郁闷的出纳员(splay)

bzoj一直 runtimecodevs ac,表示无语。。。,应该是自己写炸了#include#include#include#include#include#includeusing namespace std;const int maxn=3000009;int ch[maxn][2],n,mi,fa[maxn],id=0,w[maxn],size[maxn]

2016-06-23 18:03:50 488

原创 splay各操作伪代码

删除PROCEDURE Delete(x)   Splay(x, 0)   y ← LeftSon[x]   WHILE (RightSon[y] != 0) //求x的前驱:左子树里值最大的一个     y ← RightSon[y]   END WHILE   z ← RightSon[x]   WHILE (LeftSon[z] != 0) //求

2016-06-23 17:59:11 463

原创 自己的splay模版(bzoj1588)

#include#include#includeusing namespace std;const int maxn=1000005;const int inf=0x3f3f3f3f;int id=0,ch[maxn][2],w[maxn],fa[maxn],root,n;void rotate(int x)///重要的rotate操作{ int y=fa[x],z=fa[y],

2016-06-23 11:07:19 363

原创 vijos1091(单调队列)

对于环我们可以把它复制粘在后面。然后我们对于每一个加油站,设置一个a[]表示在这一个加油站加的油减去从这个加油站开到另一个加油站的差。那么我们要想选定某个加油站i作为起点,问题就变成了从i到i+n能够中间不断油,不断油的表现就是对于路径上的任何一个加油站k,有a[i]+a[i+1]...+a[k]>0,我们维护一个前缀和s[i]=a[1]+a[2]+a[3]+...a[i],那么a[i

2016-06-21 21:52:20 336

空空如也

空空如也

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

TA关注的人

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