自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Matrix

思考的过程让我感受到我还在有血有肉的活着

  • 博客(98)
  • 收藏
  • 关注

转载 Manacher's ALGORITHM

转载自 https://www.felix021.com/blog/read.php?2040 (自己备份用)源于这两篇文章: http://blog.csdn.net/ggggiqnypgjg/article/details/6645824http://zhuhongcheng.wordpress.com/2009/08/02/a-simple-linear-time-a

2016-12-30 00:38:25 372

原创 Kosaraju's Two-Pass Algorithm for SCC

note:1、g++ -o xxx.exe xxx.cpp -Wl,--stack -Wl,0x1000000  设置栈大小#include#include#include#include#include#include#include#include#includeusing namespace std;//#pragma comment(linker, "/

2015-02-11 12:45:28 944

原创 Random Contraction Algorithm for the min-cut problem

note:1、取迭代次数为n^2lgn2、每次迭代时提前对边集进行shuffle (关键 idea)3、并查集实现缩边code:#include#include#include#include#include#include#include#includeusing namespace std;struct edge{ int u,v;}e[2

2015-02-11 12:05:31 1375

原创 problem D

媽蛋。。贡献了12次wa后终于过了这道水题。。。各种犯2。。。数组竟然少开个0,字母y写成了p。。。。和别人程序对拍了2个小时。。。 爽。。。#include#include#include#include#include#includeusing namespace std;typedef long long ll;#define lson l,mid,rt<<1#

2013-10-16 21:49:15 939

原创 hdu4744 Starloop System

建模方法大概就是像网上其他人说的那样。。。可以看oyk的博客http://www.cnblogs.com/oyking/archive/2013/09/15/3323483.html下面讨论一下为什么这样建模是对的: 一个点u属于k个简单环的话,那么在每个环里都有两条边连u,所以u共有2k条边。考虑一个环中u的两条无向边,可以转换成两条有向边,一个进入u,一个从u出去。那么对于一个

2013-09-16 20:55:28 1205

原创 hdu4670

#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;const int maxn=50005;const int inf=0x3fffffff;struct edge{ int to,next;}ee[50005<<1];

2013-09-07 10:11:53 1101

原创 hdu4677 Query on Graph 根号n

根号n区间暴力神技。。。#include#include#include#include#include#includeusing namespace std;struct node{ int l,r,id1,id2; bool operator< (const node& a) const { return id1==a.id1?r<a

2013-09-06 11:33:23 1289

原创 hdu4685

#include#include#include#include#include#include#include#includeusing namespace std;struct edge{ int to,next;}ee1[2005*2005],ee2[2005*2005];int e1[2005],e2[2005],ecnt1,ecnt2;void adde

2013-08-30 00:13:27 1208

原创 hdu3439 Lucas定理扩展

#include#include#include#include#include#includeusing namespace std;typedef long long ll;const int maxn=100005;ll n,k,m;ll f1[2*maxn],f2[maxn],c[maxn],mul[maxn],num[maxn],tot;ll cp(){

2013-08-06 15:25:07 2093

原创 hdu4322 Candy 费用流

//#include#include#include#include#include#include#includeusing namespace std;const int inf=0x3fffffff;const int maxn=105;struct edge{ int to,c,d,next;}ee[maxn*maxn];int e[maxn],ecnt;

2013-08-05 12:11:48 953

原创 hdu4616 树形dp,分治思想

刚做这题的时候感觉很麻烦,而别人却说是经典题,当时我一点儿没看出来经典。。。知道今天看了漆子超的论文,里面第一个例题就和这个差不多。先是分治思想,然后对于每个根节点,大概想像成向下拉了许多条链出来就行了,有个小技巧可以将时间复杂度降低。#include#include#include#include#include#includeusing namespace std;typ

2013-08-03 21:45:12 1063

原创 hdu4630&&hdu4638 线段树离线操作

两题都是朴素想法枚举两个端点O(n^2)超时,那么枚举其中一个端点用线段树维护另一个端点。关键在于没插入一个端点后都是成段更新,否则又会退化到O(N^2)。ps:两题用c++交都比g++快500ms以上。4630//#include#include#include#include#include#includeusing namespace std;#define lso

2013-08-03 21:37:10 1325

原创 poj1741 树的点分治

做的第一道找重心然后点分治的题,存下代码。#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;const int maxn=10005;const int inf=0x3fffffff;struct edge{ int t

2013-08-03 21:31:18 1018

原创 hdu4640 && hdu4281

hdu4281是多旅行商问题,hdu4640是三个旅行商,这不太影响解法,主要差别在于hdu4640要求不仅仅是每个节点访问一次,而且要每个节点只能经过一次,这样求single[state][u]的时候就不能直接枚举下一个点了,而是要根据边枚举,且下一个到达的点必影响state。hdu4281:#include#include#include#include#include#in

2013-08-03 21:26:22 959

原创 hdu4604 Deque

枚举第一个不drop的点,然后就是从这个点向后找一个不升子序列和一个不降子序列,使得两者的和减去其重复的元素获得最大值。设当前处理的是i,显然两者重复的值只能是a[i],且只能是前面连续的一段是重复的。即两个子序列的形式这这样的:a1+b1a2+b2b1是当前选的不降子序列中第一个大于a[i]的元素开始的最长不降子序列的长度。a1是前面重复的a[i]的长度。b2,a2同理可知。

2013-07-24 16:48:36 1082

原创 hdu4338 Simple Path

步骤:tarjan求割点,tarjan求点双连通分量并建图,对得到的森林进行dfs求出两个量sum[i]和dis[i],tarjan离线求LCA。#pragma comment(linker, "/STACK:102400000,102400000")#include#include#include#include#include#include#include#includ

2013-07-19 22:39:28 956

转载 最大M子段和 辅助数组降低时间复杂度

http://www.cppblog.com/sdfond/archive/2009/06/19/88083.html最大M子段和  给定n个数求这n个数划分成互不相交的m段的最大m子段和。  经典的动态规划优化的问题。设f(i, j)表示前i个数划分成j段,且包括第i个数的最大m子段和,那么有dp方程:    f(i, j) = max { f(i - 1, j) + v[i

2013-07-16 19:09:15 966 1

转载 编辑距离、拼写检查与度量空间:一个有趣的数据结构 BK-Tree

转自Matrix67的博客http://www.matrix67.com/blog/archives/333。除了字符串匹配、查找回文串、查找重复子串等经典问题以外,日常生活中我们还会遇到其它一些怪异的字符串问题。比如,有时我们需要知道给定的两个字符串“有多像”,换句话说两个字符串的相似度是多少。1965年,俄国科学家Vladimir Levenshtein给字符串相似度做出了一个明确的定义叫

2013-07-12 15:26:06 908

原创 hdu4313 Matrix 树形DP

开一个dp[maxn][2]的数组,记录以i为根的子树满足要求的最小花费,0代表i没和一个标记连在一起,1代表i和一个标记连在一起。然后转移即可.... #include#include#include#include#include#includeusing namespace std;typedef long long ll;const int maxn=100005;

2013-07-06 23:52:18 838

原创 hdu4312 Meeting point-2

将切比雪夫距离转换成曼哈顿距离利用这个转换可以去掉讨厌的最值函数,挺不错的。max(|x1-x2|,|y1-y2|)=(|x1-x2+y1-y2|+|x1-x2-y1+y2|)/2 。这个转换的几何意义是,把每个点逆时针旋转45度,然后坐标乘以根号2后得到的点的曼哈顿距离等于原来点的切比雪夫距离。(可以用极坐标理解)也可以想做是顺时针将坐标轴旋转了45度。 #include

2013-07-06 18:16:00 1311

原创 hdu4309 Seikimatsu Occult Tonneru

wa了一上午,午睡的时候突然想到数组大小,改大一倍竟然就过了,看来以后在内存允许的情况下,开数组还是别卡数据范围比较好。。。#include#include#include#include#include#include#includeusing namespace std;const int maxn=222;const int maxe=3333;const int i

2013-07-04 14:01:33 932

原创 hdu4307 Matrix 最小割

...其实SAP也可以写的很短!!,不考虑bfs优化的话20行代码... #include#include#include#include#include#include#includeusing namespace std;const int inf=0x3fffffff;const int maxn=1005;struct edge{ int to,ec,ne

2013-07-03 22:57:47 882

原创 hdu4305 Lightning 几何,生成树计数

建图我是用的极角排序,然后枚举建图。 #include#include#include#include#include#includeusing namespace std;const double eps=1e-8;const double inf=1e10;const int maxn=305;const int mod=10007;struct pos{

2013-07-02 18:59:27 832

原创 hdu 4303 Hourai Jeweled 树形DP

利用排序将O(n^2)的枚举变成O(n)的枚举#include#include#include#include#include#include#includeusing namespace std;const int maxn=300005;struct edge{ int to,next,col;}oee[maxn<<1],ee[maxn];int oecnt

2013-07-01 23:00:49 876

原创 zoj 3593 One Person Game 扩展欧几里得

昨天校赛的C题... 这题导致我的比赛从15分钟就提前结束了。。。昨天确实没想清楚,虽想到了逼近的方法,但是没有理解透彻,采用的是暴力逼近,其实再仔细想一下,对于最值有影响的点就几个而已。。 。  #include#include#include#include#include#includeusing namespace std;typedef long long ll;

2013-06-30 11:37:21 1381

原创 SGU145 Strange People 严格K短路

严格的意思是每个节点只允许访问一次。解法:二分k短路路长。注意点: 观察数据范围,应该是稠密图,比较适合矩阵,测了一下矩阵比邻接表快100+ms。 另外可以先做一次spfa预处理,利用节点到t的距离剪枝,这能从300+ms优化到31ms。 TLE点:我之前二分的时候,每次是求出满足要求的路径个数,TLE 3。  看了别人代码发现每次只要找到K条路径就行,看下数据,k矩阵+spf

2013-05-23 19:30:02 1230

原创 POJ2449 Remmarguts' Date 非严格K短路模板题

MLE点:用指针写邻接表MLE了...WA点:注意s,t相同时,题目的要求,若必须移动,则应求k+1短路注意spfa求h函数值时,应该是把原图的边都反向后再求到达t的最短距离#include#include#include#include#include#include#includeusing namespace std;#define INF 0x7ffffffs

2013-05-23 15:14:49 993

原创 SGU143 Long Live the Queen

树形DPWA点:注意要找的是非空集合,测一下边界数据就能发现这个WA点,也就是输入1 -5时答案是-5。RE点:注意存的是双向边,要在给的数据范围上乘2。#include#include#include#include#include#includeusing namespace std;struct edge{ int to; edge* next;

2013-05-22 15:19:44 1003

原创 SGU142 Keyword

枚举长度+hash,可以知道长度不会超过log(n),所以复杂度是nlog(n), 10^7次方竟然62ms过了 >.#include#include#include#include#include#includeusing namespace std;bool flag[1100005];int pow[25];char s[500005],output[500005];

2013-05-22 14:18:19 951

原创 SGU141 Jumping joe

又用到了扩展欧几里得,这题其实主要是手推公式... 草稿纸被我扔进垃圾桶N次,又被我捡回来N次...T_T首先发现 (p1-n1)x1+(p2-n2)x2 =p,又是整数解,联想扩展欧几里得p1-n1=s p2-n2=tp1+n1+p2+n2=kp1>=0,p2>=0,n1>=0,n2>=0进一步推得2*(n1+n2)=k-s-tn1>=max(0,-s)n2>

2013-05-21 22:33:18 1112

原创 SGU140 Integer Sequences

扩展欧几里得的多元应用。 感觉解方程组和高斯消元这些东西写起来挺烦的。注意要求输出的x全为非负值。#include#include#include#include#include#includeusing namespace std;void ex_gcd(int a,int b,int &x,int &y,int &d){ if(b==0) {

2013-05-21 19:04:34 1193 1

转载 八数码问题

对于给定八数码棋局的初始状态,我们的目标是通过交换空格与其相邻棋子使棋盘达到目标状态。其中,游戏规则是只能交换空格与其上下左右四个方向的相邻棋子。假设棋局目标状态为如下形式:(A、B、C、D、E、F、G、H表示棋子)A  B  CD  E  FG  H          而初始状态就是A、B、C、D、E、F、G、H这八个棋子在这九个棋格上的任意分布。并且我们对棋

2013-05-20 23:14:53 1124

原创 SGU134 Centroid

#include#include#include#include#includeusing namespace std;struct edge{ int to; edge *next;}ee[32005],*e[16005];bool visited[16005];int cnt[16005],val[16005],cen,tot,output[16005],o

2013-05-20 09:22:26 791

原创 SGU133 Border

不知道为什么,之前都是while(scanf()!=EOF)可以,而这次就不行解法:排序,维护r的最值即可...其实是不需要priority_queue的...ps:刚把今天codeforces的题扫了一眼...然后就没有然后了...@_@ ,我太弱了...弱了...#include#include#include#include#include#includeusing

2013-05-19 21:45:28 710

原创 SGU131 Hardwood floor

WA点:我把所有的转移都在纸上写出来了后,发现有些情况是重复的,于是手贱给删掉了... 这样就少计算了一些情况,或者说删掉后,一个可行状态对应的方案数要乘一个常数。做法:对于一行来说,1代表在此行填充,0代表未在此行填充(也就是需要靠上一行来填充),其实就是枚举上一行的填充状态然后推出下一行的所有可行状态,然后保存起来即可。#include#include#include#inclu

2013-05-19 16:01:18 1079 1

原创 SGU128 Snake

注意:用vector离散化时,先sort,再unique。#include#include#include#include#include#include#includeusing namespace std;int tree[10005],f[10005],n;vector d;struct point{ int x,y,id; bool isl;}p[

2013-05-19 10:52:22 784

原创 SGU122 满足ORE性质的图求哈密尔顿路径

ORE性质,任意两个互异不相邻的点的度的和大于等于n(去除重边和自环),即deg(u)+deg(v)>=n。详细资料:http://www.nocow.cn/index.php/Sgu/122,http://blog.csdn.net/volzkzg/article/details/7514103解决方法就是: 从一点开始向两边扩展,直至不能扩展,然后连成环,判断点数是否为n,若不为n,则

2013-05-18 17:11:03 1012

原创 SGU114 Telecasting station 三分

WA点: 把P也当浮点数输入了...wa test1 一次...#include#include#include#include#include#includeusing namespace std;const double eps=1e-8;const double inf=1e10;double X[15005];int P[15005];int N;int sgn

2013-05-15 21:16:28 732

原创 sgu 108 self-numbers 2

技巧:滚动筛法,感觉就像是弄了个缓存区一样,由于每次最多加63,所以用两块大小大于等于63的空间充当缓存区就可以实现筛所有的数了。wa点:用unique,应该先sort再unique, 并且在lower_bound时注意使用新的尾部点。tle点: 使用long long 会超时,而int即可,原因应该是long long 输入输出以及位运算更加耗时吧#include#include

2013-05-15 15:39:05 809

原创 SGU 106 The euqation

坑点:在处理闭区间边界时,涉及到取ceil和floor的问题,当a>0,b>0时,a/b取floor,可以用(a-1)/b+1取ceil,而a0时,a/b取ceil,可以用(a+1)/b-1取floor,a=0特殊考虑,直接a/b就行。 #include#include#include#include#include#includeusing namespace std;type

2013-05-14 23:52:01 843 1

空空如也

空空如也

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

TA关注的人

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