10 2012 档案

摘要:不说什么了,模板题题目数据有点弱,不严格的次短路也能ac。。。。View Code 1 #include <cstring> 2 #include <cstdlib> 3 #include <algorithm> 4 #include <iostream> 5 #include <cstdio> 6 7 #define N 100000 8 #define M 2000000 9 10 using namespace std; 11 12 struct HP 13 { 14 int x,d; 15 }hp[M]; 16 17 int 阅读全文
posted @ 2012-10-29 22:55 proverbs 阅读(319) 评论(0) 推荐(0)
摘要:分析:可以证明,任意两点间的符合题目要求的路径必然是在MST上的。有了这个,这题就水了。。。我没有想到,是venique神犇告诉我的然后在MST上做LCA倍增,顺便维护d[i][j]表示i到他的2^j倍祖先的最大权,就好了~我是蒟蒻。。LCA写萎了。。看了venique的代码,才发现错。。。View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <iostream> 6 7 #de 阅读全文
posted @ 2012-10-29 22:27 proverbs 阅读(249) 评论(0) 推荐(0)
摘要:分析:做这个题还是需要技巧的。先将所有查询读入,按照右端点排序。从1~n扫,维护pt[i]表示i向左第一个和a[i]相等的数字的位置,扫到i的时候实时更新树状数组:c[pt[pt[i]]+1]~c[pt[i]]区间+1(pt[i]!=0),与此同时,处理右端点与i重合的查询,此询问的答案就是这个询问的左端点在树状数组中的值(树状数组起区间修改单点查询的功能),至于为什么,画个图应该很容易知道。PS:树状数组的区间修改单点查询的实现:将原数组差分,令d[i]=c[i]-c[i-1],特别地,d[1]=c[1]。那么区间[l,r]整体加上k的操作就可以简单地使用d[l]+=k;d[r+1]-=k来 阅读全文
posted @ 2012-10-29 19:52 proverbs 阅读(1123) 评论(0) 推荐(0)
摘要:分析:我其实想到链状怎么做了,没有往下多想。一直想用组合做。最后看到CLJ的题解,才发现我已经想对了一半。。。对于一个链来说,设Dp[i]为长度为i的链和一个“中心”的生成树数量,可以Dp之。。然后考虑环,枚举1节点所在的环的长度,设为Len,那么这个环的位置有Len种情况,这个环与中心连接也有Len种情况,那么这个节点对答案的贡献就是Len^2*Dp[n-Len]。。转自:http://hi.baidu.com/wjbzbmr/item/3f5e90f02b913ed66225d201View Code 1 #include <cstring> 2 #include <cs 阅读全文
posted @ 2012-10-28 21:06 proverbs 阅读(913) 评论(0) 推荐(0)
摘要:题意:中文题。思路:裸的最大流,然而点数太多,所以,转换成平面图最大流——最短路裸的不能再裸的平面图最大流竟然没有spfa快,抑郁。。刷了几天TYVJ,发现变弱了。。其实本来就特别弱(边需要建成双向的,我就不改了)View Code 1 #include <cstring> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <algorithm> 5 #include <iostream> 6 7 #define N 3000000 8 #define M 10000000 9 1 阅读全文
posted @ 2012-10-28 17:45 proverbs 阅读(1281) 评论(8) 推荐(0)
摘要:题意:给出n个鼹鼠的编号(打乱顺序)排成一列,从第一个(非编号)鼹鼠开始挖洞,第2-n个鼹鼠在第一个鼹鼠挖洞的基础上挖洞,如果编号比之前的大就往右边走,否则往左边走,如果走不通(即左边或者右边没有洞),就自己挖洞,每只鼹鼠都会挖恰好一个洞。最终会形成一个二叉搜索树,得到这个树的dfs序列,把每一项都%2,最终得到一个01序列,与输入序列匹配,求输入序列在dfs序列中出现过多少次。(貌似说的不太清楚,看不懂的话可以去读原题,很容易看懂,我这英语水平都读懂了。。。就是表达不出来)思路:笛卡尔树,鼹鼠的排列顺序满足小根堆的性质,编号满足二叉搜索树的顺序,就可以构造了~最后kmp就可以了~PS:dfs 阅读全文
posted @ 2012-10-12 20:28 proverbs 阅读(559) 评论(0) 推荐(0)
摘要:题意:给出一些节点,每个节点有两个值,lable和priority,要求构成一个笛卡尔树,按lable是二叉排序树,按priority是大根堆(不一定完全二叉树)。输出括号表示。思路:没什么好说的,完全自己独立写的代码,除了读入参考了rainy days的,其他都是独立创造的~自我感觉写的还可以~(抑郁,把括号表示法搞反了,纠结了好久,外面的括号越少的是堆顶!又一直以为只有一个字母,又纠结了好久,可以是一个字符串!)读入说明见:http://www.cnblogs.com/rainydays/archive/2011/06/15/2081266.htmlPS:字符串s是二叉排序树结构,权值w是 阅读全文
posted @ 2012-10-11 22:38 proverbs 阅读(837) 评论(2) 推荐(0)
摘要:题意:题目大意:让你构造一棵笛卡尔树。笛卡尔树的节点含有2个值,1个key,一个value,其中key是主键,value是辅键。一棵笛卡尔树就是:key升序,value升序或者降序。类似堆。判断能否构成。(PS:此题保证数据相异,必然能够成)思路:第一次做,参考的别人的,不过这个模板好像写的有点别扭。。自我感觉思路比较清晰的模板见我的下一篇文章:http://www.cnblogs.com/proverbs/archive/2012/10/11/2720592.htmlView Code 1 #include <cstdio> 2 #include <cstring> 阅读全文
posted @ 2012-10-11 22:32 proverbs 阅读(401) 评论(0) 推荐(0)
摘要:题意:一颗树,得到每个节点可到达的最远路径长度组成的序列,每给定一个q,求最长满足{最大值-最小值<=q}的连续序列的长度分析:①求以每个节点出发的最长路径dfs+树形dp:dfs出从u节点出发,向下延伸的最长路径的长度dis[u],以及是从那条边向下延伸得到的disnum[u],还有u节点向下延伸的次长路pis[u]从上向下DP,找到dp[u]表示从u向父节点延伸的最长路径长度(如果这个还不熟练请移步:HDU 2196,就是求步骤①)②维护区间最大最小的差维护一个队列(虚拟的,真实存在的只是 h 队头指针 ,t 队尾指针 两个指针),若当前h~t不满足条件h++否则t++用rmq O( 阅读全文
posted @ 2012-10-11 19:29 proverbs 阅读(341) 评论(0) 推荐(0)
摘要:题意:4*N的矩形中放入1*2的小矩形有多少种放法分析:表示公式不会推导。。没找着有人推公式的证明了。。。求证明、、、f(n)=f(n-1)+5*f(n-2)+f(n-3)-f(n-4)手动算出来前4项,然后处理线性递推式就好了~View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 6 using namespace std; 7 8 struct MT 9 {10 int x,y;11 int mt[7][7 阅读全文
posted @ 2012-10-11 19:15 proverbs 阅读(868) 评论(0) 推荐(0)
摘要:题意:将一个k进制的高精度数字A转换成m进制数B(k,m<=62)分析:我本来想把数字先转换成10进制,然后再转换成m进制,觉得太麻烦,于是乎问WZC神犇怎样做简单他是这样做的:应用“除n取余法”,我们直接短除A,除数是m还是举例说明吧:7进制下的35,转换成2进制,就用3除以2,商是1,余数是1将1*7再加上第二位的5当成第二个数,继续重复以上步骤说白了了就和10进制的短除法一样,只不过我们在对于每一位短除的处理上采用的是7进制(处理十进制的时候不都是将余数*10加到下一位么~)这样,这个题目完美解决了~PS:代码里写了好多没有用的函数,忽略就好~友情提示:注意将0转换后是否有输出我在 阅读全文
posted @ 2012-10-11 19:11 proverbs 阅读(733) 评论(0) 推荐(0)
摘要:题意:给n个block涂4种颜色,要求其中red和green的block为偶数,其余随意。输出方案总数思路:递推,设dp[i][j][k] 表示前i个block ,有j个red,k个green,的方案总数又因为j,k不是奇数就是偶数,可以简化j,k=1则表示奇数,j,k=0表示偶数就可以递推了~用矩阵递推更有效率~def={{2,0,1,1}, {0,2,1,1}, {1,1,2,0}, {1,1,0,2}}ans[0]={0,1,0,0}ans[i]=def^k*ans[i-1]注意:矩阵乘法不满足交换律。View Code 1 #include <cstdio> 2 #incl 阅读全文
posted @ 2012-10-10 22:28 proverbs 阅读(342) 评论(0) 推荐(0)
摘要:题意:an=Σ1<=i<=k (an-i*bi)mod 10000分析:典型的矩阵乘法解线性递推式~无限YM MATRIX67神犇~http://www.matrix67.com/blog/archives/276/comment-page-1#comment-223435View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <iostream> 5 6 #define SIZE 110 7 #define mod 1000 阅读全文
posted @ 2012-10-10 21:54 proverbs 阅读(494) 评论(0) 推荐(0)
摘要:题意:求S到T的经过k条路径的最短路(这题出的真心好)思路:设d[i][j][k]为从i到j经过k条边的最短路,则d[i][j][k]=d[i][p][k/2]+d[p][j][k/2]利用倍增加速floyd其实说实话矩阵乘法和floyd真心很像,直接写成矩阵乘法的格式了~PS:读入边的时候,第一个元素是边权,我纠结了半天,怎么看图也不连通。。。。View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <iostream> 5 #incl 阅读全文
posted @ 2012-10-10 21:14 proverbs 阅读(300) 评论(0) 推荐(0)
摘要:题意:求斐波那契数列第n项,mod 10000思路:本来是需要自己构造矩阵的,可是这题太仁慈了,都给画出来了,不愧是模板题~贡献我丑陋的模板PS:还是要反对模板化的代码,还是亲手打才是最好的,我都是现打的,不过需者自取~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 6 #define SIZE 4 7 #define mod 10000 8 9 using namespace std;10 11 str 阅读全文
posted @ 2012-10-10 19:52 proverbs 阅读(627) 评论(0) 推荐(0)
摘要:题意:在字符串中的pos位置插入字符串,询问pos位置的字母是谁思路:裸的块状数组,第一次写,“借鉴”了别人的,比我自己yy的短多了。。。自己yy的又长又臭,效率还低,就给出别人的吧。。PS:真心觉得块状数组是个好东西。。。View Code 1 #include <cstdio> 2 #include <cmath> 3 #include <cstring> 4 #include <cstdlib> 5 #include <algorithm> 6 #include <iostream> 7 8 #define N 50 阅读全文
posted @ 2012-10-09 00:49 proverbs 阅读(1142) 评论(0) 推荐(0)
摘要:没什么好说的,照着题目模拟就好~(别告诉我你不知道这个是中文题)View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <iostream> 5 6 #define N 60 7 8 using namespace std; 9 10 int n,m,num;11 bool tra[N*N];12 long long fz,fm,ubt,dp[N][N];13 14 long long gcd(long long a,long long 阅读全文
posted @ 2012-10-08 23:26 proverbs 阅读(215) 评论(0) 推荐(0)
摘要:题意:给定许多根木棒,两边分别涂有不同颜色,问能否将他们连成一条直线。规定只能将相同颜色的两端相连。思路:用TRIE树储存单词,TRIE树最后一个字母的节点编号就是这个单词的编号(可以和<map>类比)并查集检查是否连通——有欧拉路的前提是图连通最后加上无向图欧拉路的判定就好了~奇数度的节点只能有0或2个View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <string> 5 #include <iostream&g 阅读全文
posted @ 2012-10-07 22:03 proverbs 阅读(213) 评论(0) 推荐(0)
摘要:求区间第k小值~详细注释见代码:View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 #define M 100005 6 using namespace std; 7 int sorted[M],toleft[30][M],tree[30][M],m,n; 8 void read() 9 {10 for(int i=1;i<=m;i++)11 {12 scanf("%d",&am 阅读全文
posted @ 2012-10-07 09:25 proverbs 阅读(223) 评论(0) 推荐(0)
摘要:裸题~注意三维的前缀体积怎么算就好View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 5 #define N 120 6 7 using namespace std; 8 9 int n,c[N][N][N];10 11 inline int lowbit(int x)12 {13 return x&-x;14 }15 16 void updata(int x,int y,int z,int dt)17 {18 while(x<=n)19 {20 i 阅读全文
posted @ 2012-10-07 09:18 proverbs 阅读(283) 评论(0) 推荐(0)
摘要:题目连接:http://new.tyvj.cn/Problem_Show.aspx?id=1215思路:方程再简单不过了:dp[i]表示以第i个人为某一组最后一个人的总战斗值dp[i]=max(dp[j]+F(sum[i]-sum[j]))其中F(x)=A*x*x+B*x+C sum[i]表示战斗值的前缀和显然n^2的方程,只能得到20分单调性显然,那么就开始我们的斜率优化设j<k且满足k比j更优dp[j]+A*(sum[i]-sum[j])^2+B*(sum[i]-sum[j])+C<=dp[k]+A*(sum[i]-sum[k])^2+B*(sum[i]-sum[k])+C化简 阅读全文
posted @ 2012-10-06 20:00 proverbs 阅读(266) 评论(0) 推荐(0)
摘要:前记:好像半年前就见过这道题,折腾了半天都不会,刚学斜率优化,发现这题挺经典的,也不难,只要能想到倒推~题意:N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务。 从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti。在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需 要时间的总和(同一批任务将在同一时刻完成)。每个任务的费用是它的完成时刻乘以一个费用系数Fi。请确定一个分组方案,使得总费用最小。分析:dp[i] = min(dp[j] + (s + sumt[i] - sumt[j]) *sumf[ 阅读全文
posted @ 2012-10-06 18:23 proverbs 阅读(409) 评论(0) 推荐(0)
摘要:此题有是方程好写,优化很难(对于神犇们,简直太水了)的一道题建议做这道题之前先看这道题:http://www.lydsy.com/JudgeOnline/problem.php?id=1010题意:将一个升序的,有N个元素的序列,分组。要求每组的元素不少于K个,计算出组内各元素与最小元素的之差的和,将每组的这个值加起来,其和要最小。思路:由以上可得DP方程:dp[i]=MIN(dp[j]+sum[i]-sum[j]-(i-j)*arr[j+1]); j<i-k+1开始斜率优化(不考虑每组不少于K个元素):1.证明较优决策点对后续状态影响的持续性证明很简单,不证了,有兴趣的话,参考上一篇文 阅读全文
posted @ 2012-10-06 17:01 proverbs 阅读(439) 评论(0) 推荐(0)
摘要:考试的时候偷懒,写的map,结果被卡了。。。20分。。我这弱菜、、其实此题很水。。。思路:明显的最短路,就是写hash呗。。表示从来没写过hash,一直用map水的。。头一次写hash,还1A了~嘿嘿,细心点就好PS:我的hash函数不取摸是完美的。View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <string> 5 #include <algorithm> 6 #include <iostream> 7 阅读全文
posted @ 2012-10-05 15:29 proverbs 阅读(248) 评论(0) 推荐(0)
摘要:题意:最长公共上升子序列思路:以前都是写的n^3的,今天听说有n^2算法,就看了一下。其实就是n^3的优化以前n^3的方程是:dp[i][j]表示以a串的前i个数字且以b[j]结尾的的最大的LCIS的长度转移是:dp[i][j]=max(dp[i][j],dp[i-1][k]+1) a[i]==b[j]&&b[k]<b[j] 1<=k<jdp[i][j]=max(dp[i][j],dp[i-1][j]) a[i]!=b[j]现在开始优化:第一个方程是n^3的,i,j两层循环是肯定干不掉的,那我们就想办法干掉k的这层循环可以观察发现循环i层的状态是由i-1层转移 阅读全文
posted @ 2012-10-05 10:13 proverbs 阅读(750) 评论(0) 推荐(0)
摘要:题意:给出一个N*N的矩阵,要查询任意B*B子矩阵内的元素最大值和最小值之差。思路:没神马思路可言。刚刚做完一道RMQ,正好碰到这道题。。果断二维RMQ。不要听到“二维”就想到二维线段树,应该想到二维树状数组(指变成复杂度)二维RMQ 和就是在一维的基础上及一层循环详见代码~View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <string> 4 #include <cstdlib> 5 #include <iostream> 6 #include <cma 阅读全文
posted @ 2012-10-05 08:35 proverbs 阅读(969) 评论(0) 推荐(0)
摘要:这个提出的真心非常好!YM!题意:给定一棵无根树,问至少需要添加多少条边,使得每个节点属于且仅属于一个圈,并且,每个圈的节点数至少为3。若无解则输出-1,否则输出至少添加的边数。题解:如果不知道这个是TreeDP的话或者我大概会往图论方面想的,求SCC啊之类的。自己YY的时候没有注意到,如果是两个子链合成一个圈的话,那么根节点一定是属于该圈,于是一直在郁闷怎么分类讨论若干种转移,毕竟这种写法还是太奇葩了。一开始我的状态设计是:f[0, u]表示根节点u属于某个圈,且以u为根的整棵子树都符合要求,所需要添加的最少边数。f[1, u]表示根节点u属于某条链,且以u为根的整棵子树除了该链之外都符合要 阅读全文
posted @ 2012-10-04 22:03 proverbs 阅读(496) 评论(0) 推荐(0)
摘要:题意:容器中有 n 种原子,现提供 m 种光子,这 n 种原子中能量之差等于提供的 m 种光子之一所具有的能量,就认为这两种原子是处在容器在是危险的,现在要求取走一些原子,使得容器中的原子处在一块是安全的,同时要求剩下的原子的能量和最大。思路:很明显的树形dp,每两个处于会产生危险的原子连一条无向边,注意建图完了可能是一个森林!PS:不会有环么?我AC了以后才发现这个问题。。。网上都没提这事,不知道我没完全理解题?View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 阅读全文
posted @ 2012-10-04 21:02 proverbs 阅读(334) 评论(0) 推荐(0)
摘要:题意:有一道线性篱笆由N个连续的木板组成。有K个工人,你要叫他们给木板涂色。每个工人有3个参数:L 表示 这个工人可以涂的最大木板数目,S表示这个工人站在哪一块木板,P表示这个工人每涂一个木板可以得到的钱。要注意的是,工人i可以选择不涂任何木板,否则,他的涂色区域必须是连续的一段,并且S[i]必须包含在内。 最后还有,每块木板只能被涂一次。思路:第一眼,水题~dp[i][j]表示第i个人刷的最后一面墙是j时的最大获利一看数据范围,我水了。。。怎么优化呢?dp[i][j]含义同上dp[i][j]=max(dp[i-1][k]+(j-k)*p[i]) j-l[i]+1<=k+1<=s[ 阅读全文
posted @ 2012-10-04 20:55 proverbs 阅读(2162) 评论(0) 推荐(0)
摘要:题意:定义一种操作,操作i就是将a[i]-a[i+1]取出进行合并,再加入到a[i]的位置(我自己臆测的题意),进行n-1次操作后,会剩下一个数字。给定a[1]~a[n]及目标t(最后剩下的数字),求操作顺序。思路:相当经典!此题相当于在序列之间添加+-两种符号使得答案是t最后按照+-号输出就是了PS:第一个符号必定是减号!View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 5 #define N 120 6 #define WC 10000 7 8 using 阅读全文
posted @ 2012-10-04 14:45 proverbs 阅读(361) 评论(0) 推荐(0)
摘要:思路:与a有关的逆序对数=(在a之前出现的比a大的数+在a之后出现的比a小的数)/2当我们删除a时,减少的是 与a有关的逆序对数,当我们把a的位置填充b时增加的是 与b有关的逆序对数,可以用树状数组求这样我们相处了nmlogK的算法,显然是不能承受的(K=500000)但是我们发现当a相同时我们可以将所有的b在logn的时间内算出来,这样复杂度就成了(m+n)logK了完全可以承受~PS:不知道为什么我和别人用一样的思路我的代码怎么比他们快3倍啊。。求解释。。(卖萌。。。。)View Code 1 #include <cstdio> 2 #include <cstring&g 阅读全文
posted @ 2012-10-04 10:56 proverbs 阅读(332) 评论(0) 推荐(0)
摘要:题意:题意:给出两行数,求上下匹配的最多组数是多少。匹配规则1,匹配对的数字必须相同2.每个匹配必须有且只能有一个匹配与之相交叉,且相交叉的两组匹配数字必须不同2,一个数最多只能匹配一次思路:其实凭感觉瞎写呗。类似于最长公共子序列的方程。dp[i][j]=max(dp[i-1][j-1],dp[i-1][j],dp[i][j-1],dp[pi-1][pj-1]+2) 表示前a的前i个数和b的前j个数匹配的最大值依次含义分别是:i,j都不匹配;i不参与匹配;j不参与匹配,i,j和前面的某个符合要求的字符匹配View Code 1 #include <cstdio> 2 #includ 阅读全文
posted @ 2012-10-04 00:00 proverbs 阅读(318) 评论(0) 推荐(0)
摘要:题意:有三个相互隔离的河岸X,Y,Z,每个岸上分别有n,m,p个部落,每个河岸上的部落之间是敌对的(即同一个河岸上的部落之间不能连通),然而,位于不同河岸上的任意两个部落之间都是友好的,现在请你在部落之间搭建桥梁(不能交叉),每座桥的费用是两部落的海拔差的绝对值,求:使得每一个部落都能与至少一个他的友好部落连通 的桥的总费用。友情提示:注意坐标的顺序PS:自己连蒙带猜的题意,AC了。。O(∩_∩)O~思路:对于三个河岸,两两做一遍n^2的dp,再把三个dp结合起来做一遍dp(其实就是找最值)河岸分布图:x河岸从左向右部落编号是增大的,y、z河岸自己看吧~借用了LYD神犇的一张图片嘿嘿~xz[i 阅读全文
posted @ 2012-10-03 23:22 proverbs 阅读(770) 评论(0) 推荐(1)
摘要:题意:举办一次ACM竞赛,需要考虑两方面,1.是每个队至少都能做出1道题目,2.是冠军至少能做出n道题目。现在已知有m道题目,t支队伍,和n的值,以及每支队伍做出每道题目的概率gl[i][j],求出这次比赛能保证上面两方面都会达到的概率。PS:我代码中的n和m是反的。思路:这个题应该算是基础的概率dp了,就是一个加法原理和乘法原理,其他和普通dp一样,甚至方程更简单dp[i][j][k]表示第i个队伍,做前j道题目,作对k道的概率,方程很好写吧~我们可以把最终的答案转化成 每个队伍都做至少一道题目的概率-每个队伍都只做1~(n-1)道题的概率好了,就是这样了~View Code 1 #inc. 阅读全文
posted @ 2012-10-03 21:52 proverbs 阅读(253) 评论(0) 推荐(0)
摘要:题意:给出T个山洞,对于每个山洞,如果任意选择两点s,e,都满足s可以到达e或者e可以到达s,则输出Yes,否则输出No。思路:如果两点不可达那么在拓扑排序时,该两点谁也不是谁的前驱和后继,那么在拓扑排序时定会出现至少两个度为0的点,这两个点分别是它们本身或它们的拓扑序列的前驱。如果在拓扑排序时发现有多于1个度为0的点,那么这些点必然不可达。由此推出该题为No的充分必要条件:缩点拓扑排序过程中出现至少两个度为0的点。思路摘自:http://happylch21.blog.163.com/blog/static/1656397592011711261518/(我还是刚知道弱连通这个东西。。)Vi 阅读全文
posted @ 2012-10-02 22:27 proverbs 阅读(387) 评论(0) 推荐(0)
摘要:题意:给你一个序列,求其中长度为5的递增序列的个数(N<=50000)这题的dp的方法挺经典的,方程大家应该都会写(那个N^2的),我就不再赘述,这里巧妙地运用了树状数组求和c[i][j]表示当前状态时,以j(j是数字,不是下标)为结尾的长度为i的序列个数剩下的就是考验高精度了~1100+msView Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <iostream> 5 #include <algorithm> 6 7 阅读全文
posted @ 2012-10-02 21:07 proverbs 阅读(310) 评论(0) 推荐(0)
摘要:题意:题意:FJ有n头牛,排列成一条直线(不会在同一个点),给出每头牛在直线上的坐标x。另外,每头牛还有一个自己的声调v,如果两头牛(i和j)之间想要沟通的话,它们必须用同个音调max(v[i],v[j]),沟通起来消耗的能量为:max(v[i],v[j])* 它们之间的距离。问要使所有的牛之间都能沟通(两两之间),总共需要消耗多少能量。这个题看着数据量挺吓人的,但是只要肯动笔,这题其实很水的。思路:这个题目n^2的肯定能做,TLE呗,所以我们思考如何降低复杂度。开始动笔:设消耗的总能量为ans,则ans=sigma(max(v[i],v[j])*abs(x[j]-x[i])) 1<=i 阅读全文
posted @ 2012-10-02 19:17 proverbs 阅读(247) 评论(0) 推荐(0)