自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

kaqiur

从零到一

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

原创 ssoj2469叶落归根(矩阵乘法)

【题意】你要做的是对于每一个起始点s以及每一个总时长t(1且为整数)求出落叶在起始点为s且经过t单位时间后的位置也是s的方案数。两个方案不同,当且仅当两个方案中存在至少一个时刻落叶所经过的边不是图G中的同一条边。为了便于检验,只需要输出所有情况(即所有不同的起始点和总时长,一共n*Q种情况)的方案数对给定正整数P取模后的异或和即可——也就是说,假设所有情况的方案数分别是ans1、ans2、

2015-10-31 22:17:20 461

原创 ssoj2468设置

【题意】给n行m列数,每行取一个数组成新数,求新数中前k个最小值的异或值。【题解】%%wwx。这其实是一个用堆求k优解的一般思路。先对于每个i,将元件i的a[i][1]~a[i][m]从小到大排序,再将所有元件按照其(第2~第m种设置与第1种设置的差值)多关键字从小到大排序(共m-1个关键字)。现在开始,我们将排在第i位的元件称为元件i,其第j小的设置称为元件i的设置j。那么我

2015-10-31 22:04:04 537

原创 ssoj1021过路费(kruskal+lca)

【题意】q个询问,求x到y的路径中最大值的最小值。【思路】跟货车运输一样。两点间最大值的最小值一定在最小生成树的边上。kruskal最小生成树跑一边加入一条边使得两个不相连的的点相连时,这条边即是所求边。并查集维护将最小生成树转化为LCA。【一个定理】定理:图G的(s,t)之间的最小最大边,一定是其在最小生成树中(s,t)的路径上的最大边。证明:反证法,设(s,t)之间的最小最

2015-10-30 22:10:19 596

转载 ssoj1020编译优化(双向链表+堆优化)

【问题描述】众所周知,衡量一个编译器是否优秀的标准,除了它的编译速度和正确性以外,编译出的代码的质量也很重要。最近,作为XCC系列编译器作者的Dr. X发明了一种跨时代的优化算法:“NanGe不等式优化”。一个程序可以看成是由若干个连续的函数构成的,NanGe不等式算法能针对某一个函数进行优化,得到一个优化效果值, 不同的函数的效果值可能是不同的。但这个算法还有一个很大的Bug:该算法不能

2015-10-30 20:50:15 1095

原创 ssoj2467树(状压dp)

【题意】一个人在SE(向南向东)图上砍树,向南砍一棵树其南边的一格被占。被占的格子不能砍树,也不能再有树倒在这个格子上。一幅W*H的图有2^(W*H)种状态,问砍下的树之和为多少。【思路】因为W(1~7)很小,可以状压。f[i][s]表示前i行其中第i行对第i+1行的影响为s的(1为有影响)砍下的树之和,g[i][s]表示前i行其中第i行对第i+1行的影响为s的方案数有多少个。状态转移为:(见

2015-10-30 15:59:30 371

转载 点连通度 边连通度 最大流最小割 最小割点集 最小割边集

概念(1)一个具有 N 个顶点的图,在去掉任意 k-1 个顶点后 (1,而去掉 K 个顶点后的图不连通则称 G 是连通的, K 称作图 G 的点连通度,记作 K(G) 试设计(2)相应地如果至少去掉 K 条边使这个图不连通,则 K 成为图的边连通度 等价关系(1)求边连通度给每条边赋权值 1 ,任意选择源点,枚举汇点,依次求最小割,取其中的最小值即可(2)那么给定源点和

2015-10-29 21:05:13 1962

原创 洛谷1345奶牛的电信(最小点割)

题目描述农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流。这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相连,a2与a3相连,等等,那么电脑a1和a(c)就可以互发电邮。 很不幸,有时候奶牛会不小心踩到电脑上,农夫约翰的车也可能碾过电脑,这台倒霉的电脑就会坏掉。这意味着这台电脑不能再发送电邮了,于是

2015-10-29 21:00:42 811

原创 ssoj2460拜访女神(状压dp)

题目描述TRT出国后,想找一个好的位置住下来。而他所在的城市,恰好有N栋建筑(从1~n编号),他会选择这些建筑的某一个居住。而建筑之间,有M条双向路相连。每条道路有一个起始点u,终止点v,以及走过这条道路所需的时间d。所有建筑都可以借助一些道路相互到达。TRT每天会从他的住房出发,按任意顺序拜访他的K个女神(他想怎么走就怎么走),不过由于TRT精力有限,他的女神个数不会超过12个。可他的女

2015-10-28 21:48:29 411

原创 ssoj2461富可敌国

题目描述富可敌国的VVBS有许多枚硬币,一天,他刷完了题,没事于是,翻出了他的硬币。他将硬币排成一排,摆在桌上,有的正面朝上,有的反面朝上。接着,他叫来了他的好朋友LJH,要和他玩游戏。游戏规则大致是这样的:首先给定N(硬币数)、K,以及初始硬币的状态,然后两个人轮流操作,对于某次操作,需从N枚硬币中选出连续的K枚硬币,并且要求这K枚硬币中第一枚(最左边)的那枚硬币必须正面朝上,然后将这K

2015-10-28 20:28:37 529

原创 ssoj1018地下组织

【题意】他要让一些人有联络方式, 使得每个人都可以直接戒者间接的联系其他人。当然, 为了让地下组织保持隐蔽, 建立的联络方式越少越好。 Nc现在有m对可以选择建立的联络方式。 对于每对选择, 都有一个特定的花费。 建立好一个完善的联络方式的总花费, 是选择的每对关系的花费的最大公约数。 当然,建立好一个完善联络方式的方法也还是不唯一。 现在nc想知道, 对于所有的可能的方法, 都会有一个总花费。

2015-10-28 13:04:40 510

原创 ssoj1017集合栈(stack+set)

【题目】计算机的操作对象是一个以集合为元素的栈,一开始这个栈是空的。在每一步操作之后,栈顶集合中所含元素的个数是需要你输出的东西。计算机的操作指令有PUSH,DUP,UNION,INTERSECT,ADD。•PUSH操作将一个空集合{}入栈•DUP操作将把一个和栈顶元素相同的集合入栈•UNION操作进行两次出栈操作,并且把出栈的两个集合的并入栈•INTERSECT操作进行两次出栈操

2015-10-28 09:25:00 484 1

原创 ssoj2457备用钥匙

【题意】有n个人碰巧都要出进公司,但只有k把钥匙,没有钥匙的话出门不能锁门,门锁着进不了门,而不管有没有钥匙,进门都可以锁门,出门都可以开门,问在保证每人都能进出的前提下,最长的锁门时间。【题解】【代码】#include #include #include #include #include #include using namespace std;c

2015-10-27 20:39:58 433

原创 ssoj2458IOIOI卡片占卜(最短路)

【题意】给一个由五部分组成的序列(a个I +b个O+c个I+d个O+e个I),又给出n个操作x,y,每次费用为y-x+1,问最少花费多少可以将序列变成全I。无解输出-1。【思路】%%%yp,转化成最短路问题,从I O的交界跑到另一个交界,最短路将O变成I的花费,有三种跑法,取最小。【代码】#include #include #include #include #include

2015-10-27 17:18:41 597

原创 ssoj2456装饰大楼

【题意】有n个大楼,给你n-1个数a[i]表示位置i之前(包括位置i)有多少栋递增的高楼。问完整序列可能有多少种,也可能无解。【思路】竟然神游着把a[i]想成高度,推翻了想出来的正解……分三种情况:1、无解:a[i]>max+2或是多个a[i]==max+2;(max∈(a[1]……a[i-1])),无解;2、中间断开:有一个a[i]==max+2;(max∈(a[1]……a[i-1])),用

2015-10-27 16:10:44 938

原创 洛谷2055 [ZJOI2009]假期的宿舍(二分图)

题目描述学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题。比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C 与 A 不认识。我们假设每个人只能睡和自己直接认识的人的床。那么一个解决方案就是 B 睡 A 的床而 C 睡 B 的床。而实际情况可能非常复杂,有的人可能认识好多在校学生,在校学生之间也不一定都互相认识。我们已知一

2015-10-27 11:36:58 459

原创 洛谷1993小k的农场(差分约束系统)

题目描述小 K 在 Minecraft 里面建立很多很多的农场,总共 n 个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共 m 个),以下列三种形式描述:1. 农场 a 比农场 b 至少多种植了 c 个单位的作物。2. 农场 a 比农场 b 至多多种植了 c 个单位的作物。3. 农场 a 与农场 b 种植的作物数一样多。但是,由于小 K

2015-10-26 21:19:39 839

原创 ssoj2455有趣的有趣的家庭菜园(线段树)

【题意】有一个n块的线性菜园,每块菜园只有照到阳光(左右两边没有遮挡)才能收获果实卖出去价值为p,也可以除去费用为c,问最大利益是多少【思路】枚举n块田地i为最高处,ans即为其左边最大利润加右边最大利润。dp o(n^2)会超时。用线段树维护左边(右边)最大值,点更新,与区间值的更改。【代码】#include #include #include #include #inclu

2015-10-26 18:55:04 373

原创 ssoj2454愉快的logo设计(dp)

【题意】有一个仅有‘J’‘O’‘I’组成的序列,定义:·S0为’J’,’O’,’I’中任一字符构成的长度为1的字符串·S[k+1]为最初4^k个字符都是’J’,接下来的4^k个字符都是’O’,接下来的4^k个字符都是’I’,最后4^k个字符是字符串Sk的长为4^(k+1)的字符串给一个长度为4^k的序列,问最少改变几个字符可以成为sk序列。【思路】直接做会超时。因为序列连续一段都是

2015-10-26 15:11:22 349

原创 洛谷1268树的重量(树)

题目描述树可以用来表示物种之间的进化关系。一棵“进化树”是一个带边权的树,其叶节点表示一个物种,两个叶节点之间的距离表示两个物种的差异。现在,一个重要的问题是,根据物种之间的距离,重构相应的“进化树”。    令N={1..n},用一个N上的矩阵M来定义树T。其中,矩阵M满足:对于任意的i,j,k,有M[i,j]+M[j,k]    1.叶节点属于集合N;    2.边权均为非负整

2015-10-26 13:58:28 495

原创 ssoj2453复制&粘贴(字符串)

【题意】给你一个字符串,s,t,p指将第s到t个字符复制,粘贴到第p位上。经过n次操作,输出前k个字符。【思路】因为m=10^9,直接做会爆。每一个字符都是由上一个字符串转移来的,因此我们每次记录当前字符在上一个字符串中的位置,逐层递推回去,便得到其在初始字符串中的位置。【代码】#include #include #include #include #include usin

2015-10-26 13:19:53 427

原创 洛谷1525 关押罪犯(并查集+贪心)

题目描述S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为c 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为c 的冲突事件。每年年末,警察局会将本年内监

2015-10-23 23:46:06 431

原创 常见错误总结

1、add(x,y)注意e[ ]的范围!2、ll及其加减乘除运算

2015-10-23 20:54:59 239

原创 ssoj2431 棋盘路径(乘法逆元+组合数)

题意:n行m列的棋盘,其中有k个点无法行走,求从从(0,0)到(n,m)有多少路径。思路:从(0,0)到(i,j)有C(i+j,j)条路(没有被淹的点),经过(i,j)点的道路数有(C(i+j,j)*C(n-i+m-j,m-j))条,其中要扣去经过被淹点的路。贴代码:#include #include #include #include #include #define ll

2015-10-20 20:54:52 518

转载 逆元逆元

#includeusing namespace std;typedef long long INT;const int maxp=1e5+200;INT p[15],c[15];INT fac[maxp],inv[maxp];INT powmod(INT a,INT n,INT mod){//快速幂取模 INT ret=1; while(n){ if(n

2015-10-19 21:28:31 457

原创 洛谷1119灾后重建(floyd)

题目背景B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响。但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车。换句话说,只有连接着两个重建完成的村庄的公路才能通车,只能到达重建完成的村庄。题目描述给出B地区的村庄数N,村庄编号从0到N-1,和所有M条公路的长度,公路是双向的。并给出第i个村庄重建完成的时间t[i],你可以认为是同时开始重建并在

2015-10-19 19:21:27 589

原创 ssoj2279: 磁力阵(IDA*)

题意:给一个由小正方形组成的大正方形,其中有k条边被删除,问最少再删除几条边图中没有正方形IDA*:        1、总边数(2*n*(n+1)        2、设置估价函数h*(到目标还要删除的最小正方形数)ans)剪枝。        3、枚举第一个找到的正方形的边,删除,继续dfs。贴代码:#include #include #include #includ

2015-10-19 09:04:39 744

转载 A*和IDA*算法

A*算法(A-Star)为了赋予计算机“智慧”,我们必须更有智慧(:-P),计算机可以通过一个“估价函数”确定一个状态的“前途”的量,人呢……必须找到这个估价函数。通常,估价函数计为f^(n),f^中,^在f上方,读作f-hat(帽子)。估价函数的定义如下:f^(n)=g^(n)+h^(n)n是状态的表示,通常是状态的编号之类的。在编程中,可以写作f_hat()或者直接写成

2015-10-18 22:01:55 3962 2

原创 洛谷2243电路维修(bfs)

题目背景Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上。在她无依无靠的时候,善良的运输队员Mark 和James 收留了她。Elf 很感谢Mark和James,可是一直也没能给他们帮上什么忙。题目描述有一天 Mark 和James 的飞行车没有办法启动了,经过检查发现原来是电路板的故障。飞行车的电路板设计很奇葩,如下图所示:输入输出格式输入格式

2015-10-15 19:50:18 785

原创 oldssoj1120埃及分数(搜索)

题目描述在古埃及,人们使用单位分数的和(形如1/a的, a是自然数)表示一切有理数。 如:2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为加数中有相同的。对于一个分数a/b,表示方法有很多种,但是哪种最好呢?首先,加数少的比加数多的好,其次,加数个数相同的,最小的分数越大越好。 如:19/45=1/3 + 1/12 + 1/18019/45=1/3 + 1/15

2015-10-14 23:55:06 826

原创 洛谷1462通往奥格瑞玛的道路(二分+spfa)

题目背景在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛题目描述在艾泽拉斯,有n个城市。编号为1,2,3,...,n。城市之间有m条双向的公路,连接着两个城市,从某个城市到另一个城市,会遭到联盟的攻击,进而损失一定的血量。没经过一个城市,都会被收取一定的过路

2015-10-13 13:32:10 664

原创 洛谷1341无序字母对(无向图欧拉回路)

题目描述给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒)。请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现。输入输出格式输入格式:第一行输入一个正整数n。以下n行每行两个字母,表示这两个字母需要相邻。输出格式:输出满足要求的字符串。如果没有满足要求的字符串,请输出“No Solution”。如果有多种

2015-10-12 21:23:28 1218

原创 洛谷1262间谍网络(tarjan缩点)

tarjan缩点思想:http://m.blog.csdn.net/blog/qq574857122/16361033题目描述由于外国间谍的大量渗入,国家安全正处于高度的危机之中。如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B。有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报。所以,如果我们能够收买一些间谍的话,我们就可能控制间谍网中

2015-10-12 20:20:16 967

原创 ssoj1011: KC的瓷器

题意:给定n排,每排si个瓷器,每个瓷器有一个价值,每次只能从两边取,问取m个的最大价值。思路:枚举每行取j(0~si)个瓷器最大价值,再在总结果上修改。#include #include #include #include #include #include using namespace std;const int maxn=10004;int n,m,mx[maxn]

2015-10-10 17:38:15 487

原创 ssoj2437打字游戏

题意:给一个键盘,每次操作能够移动光标一次或点击一次选择,问打出给定的一串字符最少要按几次。思路:把相同字母变为一块,预处理它向上下左右走一步能走到哪个字母块,再BFS求最短路。#include #include #include #include #include #include using namespace std;const int maxn=10004;cons

2015-10-06 20:15:20 384

原创 ssoj2436放置游戏

题意:给一棵树,每个点能放一只狗,每条链上不能放超过k只的狗,问这棵树上最多能放多少只狗。思路:从最末端开始放是最优的(自己证明)。从最末端开始放k/2层,当k为奇数时,随便加一个点。#include #include #include #include #include #include #include using namespace std;const int max

2015-10-06 20:02:36 417

原创 ssoj2435 回文串游戏(贪心)

题意:给一个串,和一个初始位置,每次操作可以左移一位或右移一位,当前值加一或减一,要求最少操作次数使串变成回文串。思路:只要处理初始位置所在的半边。注意:一开始写的程序,不必更改的和只有一位要更改的,情况一样,要处理一下。#include #include #include #include #include #include using namespace std

2015-10-06 20:01:16 570

原创 ssoj2434: Sleet(欧拉回路)

题意:男女比例达到了惊人的1:1,n个男生和n个女生,男生编号为0,2,4,…2n-2,女生编号为1,3,5,…2n-1,他们按照编号坐成一圈,Capo的老师有个要求,编号为x的顺时针方向下一个人编号必须是2x,2x+1,2x-2n,2x+1-2n中的一个。想让你设计坐座位的方案。思路:每个点的出度(连到2x%2n & (2x+1)%2n)和入度都为2,且只能经过一次。即哈密顿回路。再转换成欧

2015-10-05 22:28:24 467

原创 ssoj2433: Shine

题意:一把刷子,只能往右和下刷。给一个图,求刷完这个图最小能用多大的刷子,若不存在输出-1;思路:存在解的图案是阶梯状的。枚举长宽(i、j)第一个矩形肯定要长满或宽满,接下来往下刷(一步)的时候,右和下不能同时存在路径,也不能都不存在路径(在碰到末尾标记之前)。贴代码:#include #include #include #include #include #include

2015-10-05 22:26:31 454

原创 ssoj2428七十和十七

题意:首先从左到右扫描每个相邻数对。如果这两个数是逆序的,则将第二个数(也就是小的数)放在整个排列的开头,其他数位置不变,并把计数器加一。如果没有逆序的相邻数对了,就说明已经排好序了,算法终止。七十君认为计数器的值反映了这个算法的运行时间。但十七君觉得七十君发明的这个算法会很慢,所以他请你帮忙算算,对于所有长度为n的排列P,的值,这里f(P)表示排列P运行算法结束时计数器的值。

2015-10-05 08:22:18 506

原创 ssoj2427: 学数数(RMQ)

题意:一个数组有n个数,能够分成n(n+1)/2个连续子数组。记录这些子数组的最大数。有q个询问,求满足询问的数字有多少个。思路:o^2肯定超。离散化。对于当前的数,找到他左右两边第一个大于它的数,左边的距离(x),右边的距离(y),f[当前数]+=x+y+x*y。RMQ记录区间最大值。各种细节写挂了。。。(1)要开long long,与ll相关的也要ll。(2)因为离散了,所以对

2015-10-04 13:35:29 412

空空如也

空空如也

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

TA关注的人

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