自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

scf0920

退役ACMer渣

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

原创 POJ 3264 Balanced Lineup (RMQ)

题目地址:POJ 3264 为了学LCA在线算法,先学一下RMQ。。。RMQ第一发,纯模板题。不多说。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <s

2015-04-05 20:23:07 674

原创 (山东省第一届省赛 I 题) SDUTOJ 2159 Ivan comes again! (线段树+set)

题目地址:SDUT 2159 这题的数据很水。。几乎所有人都是水过去的。。网上也没找到正解,全是水过去的。于是我来第一发正解23333。 首先,可以想到的是先离线下来,然后对行离散化,然后对于每行的所有列用set去存,那么怎么去找最小的行有大于给出列的列数呢?这时候线段树就可以登场了,用线段树来维护每一行的出现的最大列,这样就可以用线段树去搜了。然后删除添加操作同

2015-04-05 10:35:12 1250

原创 HDU 2874 Connections between cities (离线LCA)

题目地址:HDU 2874 好坑的一道题。。MLE了好长时间、。、。全用了前向星而且把G++改成了C++才过了。。 LCA裸题,没什么好说的。。 代码如下;#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#inc

2015-04-03 20:22:42 808

原创 HDU 4389 X mod f(x) (数位DP)

题目地址:HDU 4389 第一次遇到需要先枚举然后再数位DP的。 先枚举各位数之和,即,1~81,然后数位DP过程中再判断枚举的各位数之和与枚举的数是否相同,只有相同的才算。 dp[i][j][k][h]表示第i位上,当前的各位数和为j,枚举的各位数和为k,当前的数对k取模为h的数的个数。 代码如下:#include <iostream>#include <string.h>#incl

2015-04-01 20:27:26 736

原创 FZU 2040 Tiling (矩阵快速幂)

题目地址:FZU 2040 重点在于构造矩阵,先状压,然后根据每一行是否与下一行分割了来构造一个2^(m-1)*2^(m-1)的矩阵,然后套上矩阵快速幂就可以了。937ms险过。。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#includ

2015-03-31 17:32:01 949

原创 FZU 2041 Checker (贪心+模拟)

题目地址: FZU 2041 这个题是昨天的队内选拔赛用的套题里的其中一道题,我当时想到方法了,但是没敢写。。一个是对复杂度有些不确定,万一组数很多的话好像就会跪。。而且感觉不太好实现,队里还卡着两道题,就打算等别的该出的题出了之后再写,结果没时间了。。 刚才按照那思路写了一下。。结果就过了。。。我&……%¥%**……%% 思路是先枚举每个空隙,

2015-03-30 20:40:28 846

原创 HDU 5195 DZY Loves Topological Sorting (拓扑排序+线段树)

题目地址:HDU 5195 简直受不了了。。BC第二题都开始线段树+拓扑排序了。。。 这题很容易想到拓扑排序过程中贪心,但是贪心容易TLE,所以需要用数据结构去维护,我用的是线段树维护。每次找入度小于等于k的编号最大的点,这样就可以保证字典序一定是最大的。 代码如下:#include <iostream>#include <string.h>#include <math.h>#inclu

2015-03-30 15:46:57 917

原创 Codeforces Round #297 (Div. 2) D题. Arthur and Walls(BFS)

题目地址:Arthur and Walls 这题有一个脑洞,对于当前的点(i,j)并且此点为”*”来说,若存在包含它的2*2正方形中除了它自己外,另外三个点都是”.”,那么这个点就必须要变成”.”。由于去掉这个点之后会对周围的8个点造成影响,所以可以用BFS去搜。WA第12组的应该是只考虑了会影响到周围的4个点了。 代码如下:#include <iostream>#include <strin

2015-03-28 10:36:18 1352

原创 HDU 2586 How far away ? (LCA最近公共祖先)

题目地址:HDU 2586 LCA第一发。 纯模板题。 偷懒用的vector,结果一直爆栈。把G++改成C++就过了。。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>

2015-03-27 21:24:09 808

原创 Codeforces Round #297 (Div. 2) E题. Anya and Cubes (中途相遇法)

题目地址:Anya and Cubes 比赛的时候居然没想起中途相遇法。。。这题也是属于想起来就很简单系列。 中途相遇法也叫折半搜索。就是处理前一半,把结果储存起来,再处理后一半,然后匹配前一半存储的结果。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algo

2015-03-27 21:12:08 1292

原创 (福大2015年3月月赛)FZU 2185 树的路径覆盖 (DFS)

题目地址:FZU 2185 允许重复覆盖的值比较好求,一条路径覆盖两个叶子节点,所以答案是(叶子结点数+1)/2。至于不允许重复覆盖的,我第一次想的是叶子节点数-1,因为先让第一条覆盖两个叶子结点,后面的每条覆盖一个,但是显然作为渣渣的我太native了。 很显然,当所有叶子节点都指向一个节点的时候肯定不是,这时候可以一条路径覆盖两个叶子节点。

2015-03-24 21:11:17 952

原创 (福大2015年3月月赛)FZU 2186 小明的迷宫 (BFS+状压DP)

题目地址:FZU 2186 这题是很基础的TSP状压,各个点之间的距离要先用BFS预处理出来。 这题在写memset(dp,INF,sizeof(dp));时,写成了memset(dp,INF,sizeof(d));。。。 调试了好长时间。。无语了。。。最近的状态太不行了。。 代码如下:#include <iostream>#include <string.h>#include <mat

2015-03-24 17:12:13 1142

原创 HDU 5188 && Bestcoder #33 C题. zhx and contest (01背包)

题目地址:HDU 5188 按照l-t排序,l-t即最早开始的点。排完序后就是一个单纯的01背包了。 代码如下:#include <cstdio>#include <cstring>#include <cmath>#include <queue>#include <stack>#include <map>#include <algorithm>#define INF 0x3f3f3

2015-03-23 21:28:18 834

原创 ZOJ 3841 Cards (组合数+乘法逆元)

题目地址:ZOJ 3841 这题很快就写出来了,但是我犯了一个很**的错误,忘了把0的阶乘设为1。。卡了整整两个小时。。。写完题解就去面壁思过。。不要拦我。。 这题的思路是从前往后遍历,对于第i位来说,从比他小的牌开始枚举,枚举的比当前牌小的话,那么后面的放什么都可以,所以求全排列,求全排列的过程中要用到乘法逆元(幸亏CF补题场场不落。。最近从CF补题中学会的。。

2015-03-23 19:21:35 1257

原创 HDU 5187 zhx's contest(快速乘法)

题目地址:HDU 5187 分凸型与凹型讨论,对于每一种来说,分别有C(n-1,0)+C(n-1,1)+…+C(n-1,n-1)=2^(n-1)种情况,然后合起来共2^n种情况,有两种重复的,所以共2^n-2中情况。于是快速幂,但是由于mod为LL 型,在快速幂过程中会爆LL。所以在快速幂的乘法时,用快速乘法,原理跟快速幂一模一样。 代码如下:#include <iostream>#inclu

2015-03-23 15:35:56 800

原创 POJ 1904 King's Quest (强连通分量)

题目地址:POJ 1904 很神奇的一道题啊。至于详解看这篇博客吧,传送门写的非常详细。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#in

2015-03-20 20:35:51 915

原创 POJ 2762 Going from u to v or from v to u?(强连通分量+拓扑排序)

题目地址:POJ 2762 先缩点,然后判断拓扑网络每层的个数是否为1(我承认如果事先不知道这题需要拓扑排序我是想不出来这点的。。。)。因为假如有一层为2的话,那么从此之后这两个岔路的点就不可能从一点到另一点的。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <al

2015-03-13 20:33:38 917

原创 HDU 1428 漫步校园 (BFS+优先队列+记忆化搜索)

题目地址:HDU 1428 先用BFS+优先队列求出所有点到机房的最短距离,然后用记忆化搜索去搜。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set

2015-03-13 11:17:11 806

原创 POJ 3666 Making the Grade (DP+离散化)

题目地址:POJ3666 dp[i][j]表示第i位时,值为j时的最小代价。因为j太大,由于要改变值的话,变到与之最近的值相同是最优的,所以可以离散化,这样,j对应了各个值得下标。复杂度O(n^2)。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorith

2015-03-13 09:52:28 1233

原创 POJ 2375 Cow Ski Area (强连通分量)

题目地址:POJ 2375对每个点向与之相邻并h小于该点的点加有向边。然后强连通缩点。问题就转化成了最少加几条边使得图为强连通图,取入度为0和出度为0的点数的较大者即可。注意,当强连通分量只有一个的时候,答案是0,而不是1.代码如下:#include #include #include #include #include #include #include #includ

2015-03-12 19:05:57 908

原创 POJ 2186 Popular Cows (强连通分量)

题目地址:POJ 2186先用强连通分量缩点,然后形成一棵树。我第一次用的判定条件是入度为分量数-1。虽然这种情况下确实正确。但是在树中也是有间接关系的。这个条件并不是充分必要条件。正确的做法是逆序建树,然后找根结点。而且根结点有且只有一个才可以。所以转化成了找出度为0的分量。代码如下:#include #include #include #include #include

2015-03-12 16:08:31 682

原创 POJ 2553 The Bottom of a Graph (强连通分量)

题目地址:POJ 2553题目意思不好理解。题意是:G图中从v可达的所有点w,也都可以达到v,这样的v称为sink。然后升序输出所有的sink。对于一个强连通分量来说,所有的点都符合这一条件,但是如果这个分量还连接其他分量的话,则肯定都不是sink。所以只需要找出度为0的强连通分量即可。代码如下:#include #include #include #include #in

2015-03-12 15:29:12 924

原创 HDU 2242 考研路茫茫——空调教室 (双连通分量+树形DP)

题目地址:HDU 2242先用双连通分量缩点,然后形成一棵树,然后在树上做树形DP,求出每个点的子树和。然后找最小值即可。需要注意一下重边的问题,第一次返回父节点时可以忽略,因为这是反向边,然后之后再返回的时候就不是反向边了。不能忽略了。代码如下:#include #include #include #include #include #include #include

2015-03-12 09:46:21 1389

原创 POJ 3177 Redundant Paths (双连通)

题目地址:POJ 3177找出各个双连通分量度数为1的点,然后作为叶子节点,那么ans=(叶子结点数+1)/2。需要注意的是有重边。代码如下:#include #include #include #include #include #include #include #include #include using namespace std;#define LL l

2015-03-11 17:40:08 803

原创 Codeforces Round #177 (Div. 1) B. Polo the Penguin and Houses (组合数学)

题目地址:http://codeforces.com/contest/288/problem/B首先,前面的k个与后面的n-k个是没关系的,后面的n-k个显然是(n-k)^(n-k),所以只需看前k个,而由于2-k都可以到达1,所以1放1-k都可以,所以这时只研究2-k个。     由于都要到达1,所以2-k必须有1,这时候讨论有多少个1,如果有x个1,则此时是C(k-1,x),然后再讨论

2015-03-07 13:50:18 1978

原创 HDU 3639 Hawk-and-Chicken (强连通分量+树形DP)

题目地址:HDU 3639先用强连通分量缩点,缩点之后,再重新按缩点之后的块逆序构图,每个块的值是里边缩的点的个数,那么得到选票的最大的一定是重新构图后入度为0的块,然后求出来找最大值即可。代码如下:#include #include #include #include #include #include #include #include #include usin

2015-03-06 19:41:19 1105

原创 Codeforces Round #295 (Div. 1) C. Pluses everywhere (组合数学+乘法逆元)

这题可以这样想:      对于当前第i位来说,该位若在个位上出现,那么第i位和第i+1位中间肯定有一个“+”,剩下的k-1个“+”分布在剩下的n-2个空隙中,所以出现的总次数是C(n-2,k)。同理,在十位上出现的总次数是C(n-3,k)。于是每个数字的贡献值就可以求出来了,累加即可。      所以大体思路是遍历所有可能出现的位数,从个位开始,分成两部分计算,一部分用前缀和计算出前面所

2015-03-05 20:05:30 1069

原创 Codeforces Round #295 (Div. 1) B. Cubes (STL+类拓扑)

最近课业繁重,这题写了两天。。昨晚睡觉的时候才突然想到了最后一点的解决方法。不知道该不该叫做拓扑。。感觉还是挺像的。。就把标题称之为类拓扑了。。这题的方法是用map来标记状态是否存在,然后用类似拓扑的方法不断的找拿走后依然稳定的方块,我用了两个优先队列来维护,分别取最大和最小。然后就是模拟这个过程取方块了。代码如下:#include #include #include #incl

2015-03-05 16:10:56 933

原创 Codeforces Round #293 (Div. 2) D. Ilya and Escalator (概率DP)

dp[i][j]表示第i秒电梯进去的人数为j时的概率。由于概率比较好求,而且这里的样本是有限个。所以可以先求出概率,然后用公式转化成期望。#include #include #include #include #include #include #include #include #include using namespace std;#define LL __int64

2015-02-25 22:27:44 805

原创 HDU 3072 Intelligence System (强连通分量)

题目地址:HDU 3072这题一开始理解错题目意思了。。(不得不吐槽一下题目意思确实不好理解。。)用的强连通+最小生成树做的。。。然后错了好多遍。。。sad。。题目意思是从一个给定点向其他所有点通信的最少花费,那么入度为0的点肯定是那个给定点。然后对于其它点,枚举就好了。找一个到他花费最少的点的花费。代码如下:#include #include #include #include

2015-02-22 22:43:09 1100

原创 HDU 1827 Summer Holiday (强连通分量)

题目地址:HDU 1827先缩点,缩完点后,找出入度为0的块就是需要传递的块。然后用块中花费最少的来当代表块中的花费。累加起来就行了。代码如下:#include #include #include #include #include #include #include #include #include using namespace std;#define LL

2015-02-22 22:35:32 961

原创 HDU 3861 The King’s Problem (强连通+二分匹配)

题目地址:HDU 3861这题虽然是两个算法结合起来的。但是感觉挺没意思的。。结合的一点也不自然,,硬生生的揉在了一块。。。(出题者不要喷我QAQ。)不过这题让我发现了我的二分匹配已经好长时间没用过了。。都快忘了。。正好在省赛之前又复习了一下。代码如下:#include #include #include #include #include #include #incl

2015-02-22 22:21:40 879

原创 Codeforces Round #292 (Div. 1) B. Drazil and Tiles(拓扑排序)

题目地址:codeforces 292 B 用队列维护度数为1的点,也就是可以唯一确定的点,然后每次找v1,v2,并用v2来更新与之相连的点,如果更新后的点度数为1,就加入队列。若最后还有为”.”的,说明无解或解不唯一。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include

2015-02-20 21:24:04 1109

原创 Codeforces Round #221 (Div. 2) D. Maximum Submatrix 2 (思维题)

题目地址:codeforces 221 D 这场是人生中做的第一场CF中的D题。(当时只做出来了A题。。)过年之际回顾了一下,就顺便看了几道D题。现在做CF的D题在比赛时还是做不出来。但是赛后往往都可以自己做出来。据说D题能在比赛中稳出的话就可以区域赛银了。于是争取以后CF能稳出4道题吧。 这道题刚开始不该看标签的。。给的是DP。。于是就一直朝着DP方向想。但是感觉不像是DP。就换了个思路,就做

2015-02-20 20:04:03 1054

原创 Codeforces Round #291 (Div. 2) E - Darth Vader and Tree (DP+矩阵快速幂)

这题想了好长时间,果断没思路。。于是搜了一下题解。一看题解上的”快速幂”这俩字,不对。。这仨字。。犹如醍醐灌顶啊。。。因为x的范围是10^9,所以当时想的时候果断把dp递推这一方法抛弃了。我怎么就没想到矩阵快速幂呢。。。。。。。还是太弱了。。sad。。100*100*100*log(10^9)的复杂度刚刚好。 于是,想到了矩阵快速幂后,一切就变得简单了。就可以把距离<=x的所有距离的点数都通过

2015-02-16 23:11:59 1337

原创 POJ 1780 Code (欧拉回路+非递归版dfs)

题目地址:POJ 1780 还是求序列的欧拉回路。只不过这题有两坑。 第一坑是用数字来当点的话,会MLE,因为每个数字可以连10条边,100w条边会MLE,即使用vector也会TLE。这题可以用边来记录,对于n为1时直接输出,然后后面的,比如12,23这两个点就用边权值为123来表示这两个点,这样就把点和边的范围都缩小了10倍。 第二坑是用递归的dfs会爆栈

2015-02-16 19:32:01 1415

原创 HDU 2894 DeBruijin (欧拉回路)

题目地址:HDU2894 跟POJ 1392基本一样的。。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#include <stdio.h>

2015-02-16 15:36:07 1071

原创 POJ 1392 Ouroboros Snake (欧拉回路)

题目地址:poj1392 欧拉回路水题。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#include <stdio.h>using na

2015-02-16 15:32:16 1242

原创 Codeforces Round #291 (Div. 2)解题报告A.B.C.D.E

A - Chewbaсca and Number 大于4的倒置,小于等于4的不倒置。注意第一位如果是9则不倒置。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#inclu

2015-02-15 23:31:22 1165

原创 POJ 2337 Catenyms (欧拉回路+并查集)

题目地址:POJ 2337这题跟POJ 1386差不多,只不过这题多一个输出路径而已。按字母来建边,每个单词的首字母和尾字母加边。先判断是否连通,然后判断每个字母的入度和出度不能出现差的绝对值大于2,然后入度和出度差的绝对值为1的不能超过两个。就可以形成欧拉路径代码如下:#include #include #include #include #include #inc

2015-02-12 15:50:41 803

空空如也

空空如也

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

TA关注的人

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