题解
文章平均质量分 65
gohsyi
这个作者很懒,什么都没留下…
展开
-
[codevs 1033] 蚯蚓的游戏问题
[codevs 1033] 蚯蚓的游戏问题题解:首先每个点只能走一次,所以要靠拆点 (X -> Xi, Xj) 来限制每个点走的次数,容量为1,费用为食物量的相反数。从源点向所有第一层的点 Xi 连一条容量为1,费用为0的边。从最后一层的点 Xj 向汇点连一条容量为1,费用为0的边。因为从源点向所有第一层的点连边不考虑蚯蚓个数,即没有限制最大流量,所以再建立一个超级原创 2015-01-18 11:01:07 · 777 阅读 · 0 评论 -
[codevs 1904] 最小路径覆盖问题
[codevs 1904] 最小路径覆盖问题题解:最近会更新一个有关网络流经典的建模问题的汇集的文章,包括 最大基数匹配、最大完美匹配、最少路径覆盖、最小边覆盖、最大独立集等问题。代码:总时间耗费: 4ms 总内存耗费: 364B#include#include#include#include#includeusing namespace原创 2015-02-01 22:25:10 · 693 阅读 · 0 评论 -
[codevs 1232] 飞行员配对方案问题
[codevs 1232] 飞行员配对方案问题题解:做法一:二分图最大匹配。做法二:用网络流求解二分图最大匹配...但是都卡在输出路径上面。。。纠结要不要直接交数据,反正我有。。。代码(未AC):#include#includeusing namespace std;const int maxn = 100 + 10;int x[maxn原创 2015-02-01 16:14:22 · 486 阅读 · 0 评论 -
[codevs 2236] 终极情报网
[codevs 2236] 终极情报网题解:题目很长,要有耐心,其实思路很清晰。网络流模型很容易想,难点倒出在实数处理和输出上。首先因为求可靠程度也就是求概率要相乘,所以要想用费用流求解就先用log()函数转化成加法——学过高数(呵呵高中数学)的应该都会对数运算吧。最后输出再用exp()函数转化回来。最后好不容易解决了输出问题,发现输出了类似科学计数法的东西*%¥#……原创 2015-02-01 14:25:07 · 426 阅读 · 0 评论 -
[codevs 1906] 最长递增子序列问题
1906 最长递增子序列问题题解:第一问是普通的DP,同时为后面做铺垫。后面的在《线性规划与网络流24题》里说的要比我好,引用来:第一问动态规划已经求出F[i],表示以第i位为开头的最长上升序列的长度,求出最长上升序列长度K。1、把序列每位i拆成两个点和,从到连接一条容量为1的有向边。2、建立附加源S和汇T,如果序列第i位有F[i]=K,从S到连接一条容量为1的有向原创 2015-02-01 14:35:53 · 522 阅读 · 0 评论 -
[codevs 1914] 运输问题
[codevs 1914] 运输问题题解:直接看要求建图,求费用流取相反数输出,再改边费用求费用流输出。代码:总时间耗费: 58ms 总内存耗费: 364B#include#include#include#include#includeusing namespace std;const int maxn = 500 + 10;co原创 2015-02-01 14:04:00 · 554 阅读 · 0 评论 -
[codevs 1912] 汽车加油行驶问题
http://codevs.cn/problem/1912/题解:看到题后第一反应就是费用流,因为求的就是最小费用,还要加入邮箱中剩余油量为参数,因为剩余油量不同到达那个结点后所要执行的操作也不同,因此按油量多少建立Z层图,每个结点向相邻结点的下一层连一条容量为1的边,费用看要求来定。最后输出最小费用。后来看了题解,发现这个题更好的做法是分层图最短路。想想也是,所有的边原创 2015-02-03 06:22:43 · 1450 阅读 · 0 评论 -
[codevs 1917] 深海机器人问题
[codevs 1917] 深海机器人问题题解:看题建图。“k个深海机器人从(x,y)位置坐标出发”、“r个深海机器人可选择(x,y)位置坐标作为目的地”,嗯~暗示已经很清楚了。一开始没理解题目中关于地图大小的叙述,还要记得建立多重边(有点方格取数2的味道)。代码:总时间耗费: 5ms 总内存耗费: 364B#include#inclu原创 2015-02-01 14:09:20 · 555 阅读 · 0 评论 -
[codevs 1227] 方格取数2
[codevs 1227] 方格取数 2题解:注:这是CODEVS的方格取数2,走k次的版本。因为每个格子可以走无数次,但走过一次之后数字就变成了0,也就是只有一次可以加上格子里的数字。所以要拆点(X->Xi,Xj),在Xi和Xj之间连一条容量为1,费用为数字的相反数的边(取走该格数字),再连一条容量为INF,费用为0的边(第2,3...n次走该格)。再从每个格子的Xj点向左面原创 2015-02-01 13:28:35 · 885 阅读 · 0 评论 -
[codevs 1913] 数字梯形问题
[codevs 1913] 数字梯形问题题解:本题就是加强版的 [codevs 1033] 蚯蚓的游戏问题。分别针对三个规则建图、运行最小费用最大流。规则1:从梯形的顶至底的m条路径互不相交。分析:因为要互不相交,所以每个点只能走一次,因此要拆点(X->Xi,Xj),容量为1费用为数字相反数,从源点向顶层每个Xi连容量为1,费用为0的边。从底层每个Xj向原创 2015-02-01 12:36:51 · 1269 阅读 · 0 评论 -
[codevs 1922] 骑士共存问题
[codevs 1922] 骑士共存问题题解:二分图最大独立集问题。代码:总时间耗费: 3172ms 总内存耗费: 11 kB#include#include#include#include#include#include#includeusing namespace原创 2015-02-01 13:51:01 · 787 阅读 · 0 评论 -
[codevs 1915] 分配问题
[codevs 1915] 分配问题题解:二分图最大完美匹配及最小完美匹配。可以用费用流来做。比较简单的方法就是把边权设为负值求最小费用最大流,费用的相反数就是最大完美匹配。最近会更新一个匈牙利算法的代码。代码:总时间耗费: 73ms 总内存耗费: 488B#include#include#include#include#in原创 2015-02-01 13:58:24 · 372 阅读 · 0 评论 -
[codevs 1035] 火车停留
http://codevs.cn/problem/1035/题解:看到题后第一反应应该是把容量作为限制车站个数的条件。那么就以火车为单位建图了。拆点,X->Xi,Xj,建立源点、汇点,源点向每个点Xi连边,Xj向汇点连边,Xi向Xj连边,表示火车进站,所以费用设为-cost,接下来对火车之间的关系进行计算,如果两辆火车可以进入同一个车站,就从Xj向Yi连边。为了限制车站个数原创 2015-02-03 17:41:47 · 757 阅读 · 0 评论 -
[codevs 1907] 方格取数3
[codevs 1907] 方格取数3题解:二分图染色、最大独立集。连边时别连重了,两个点之间就连一条边和一条反向边。最近会写个最大独立集问题转化的分析思路。代码:总时间耗费: 3ms 总内存耗费: 492B#include#include#include#include#includeusing namespace原创 2015-02-01 14:18:04 · 617 阅读 · 0 评论 -
[codevs 1911] 孤岛营救问题
http://codevs.cn/problem/1911/题解:这个题简单的做法就是建立分层图,还记得那篇 汽车加油行驶问题 吗?那是按照邮箱剩余油量建立分层图,而这个题要以获取钥匙的状态建立分层图,然后BFS就行了。我比较喜欢的方式是把所有信息都放到结构体Node里,然后借助Node类型的STL队列进行BFS。在算法实现上,并不需要真的建立一个显式图,用BFS边遍历边建图就原创 2015-02-03 12:39:53 · 597 阅读 · 0 评论 -
[codevs 1034] 家园
http://codevs.cn/problem/1034/题解:按照时间建立分层图,建立超级源和超级汇,最大流量等于总人数时就退出。代码:错哪了呢?状态: 运行错误(内存访问非法) Runtime Error 得分 : 60 总时间耗费: 48ms 总内存耗费: 10 kB#include#include#include#in原创 2015-02-03 15:54:01 · 1202 阅读 · 0 评论 -
[codevs 1237] 餐巾计划问题
http://codevs.cn/problem/1237/题解:引用《24题》:把每天分为二分图两个集合中的顶点Xi,Yi,建立附加源S汇T。1、从S向每个Xi连一条容量为ri,费用为0的有向边。2、从每个Yi向T连一条容量为ri,费用为0的有向边。3、从S向每个Yi连一条容量为无穷大,费用为p的有向边。4、从每个Xi向Xi+1(i+15、从每个Xi向原创 2015-02-03 17:35:20 · 551 阅读 · 0 评论 -
[codevs 1916] 负载平衡问题
http://codevs.cn/problem/1916/题解:负载平衡问题是一类问题,大意就像题目说的那样,是个很有用的网络流模型。《线性规划与网络流24题》里有对建模的概述:首先求出所有仓库存货量平均值,设第i个仓库的盈余量为A[i],A[i] = 第i个仓库原有存货量 - 平均存货量。建立二分图,把每个仓库抽象为两个节点Xi和Yi。增设附加源S汇T。//i表原创 2015-02-03 12:27:03 · 477 阅读 · 0 评论 -
[CODEVS 1285] 宠物收养所
http://codevs.cn/problem/1285/题解:运用STL的set,和算法库(Algorithm)的upper_bound()与lower_bound(),实现log(n)的查找。要注意的是set类的upper_bound(x) 返回在集合中第一个大于x的元素,而lower_bound()返回在集合中第一个大于或等于x的元素,与它们在数组中的作用不太一样。代码: 总时间耗费:原创 2015-02-06 12:42:35 · 428 阅读 · 0 评论 -
[CH Round #61] 取数游戏
描述SJY和CYF在玩一个取数游戏。他们将1~n分别写在n张纸上,随机排成一排,约定SJY先取,只能取走最边上的两张纸之一,然后CYF取;以此循环下去,取到1的人获胜。假设SJY和CYF足够聪明,求SJY获胜的概率。输入一个整数n输出SJY获胜的概率,保留最简分数形式(若为1,则输出1/1;若为0,则输出0/1)。 样例样例输入1 2 样例输出1 1/1样例输入2 3 样例输出2原创 2015-02-06 23:01:24 · 544 阅读 · 0 评论 -
[codevs 3273] 两圆的交
题解需要考虑几种情况:外切或外离。面积为0,注意要输出 0.000。内切或内含或重合。面积为较小圆的面积。相交,还需要讨论交点位置: 交点在两圆心中间 即异侧交点在两圆心同侧在求三角形面积的时候有两种方法:运用三角形两边的叉积的绝对值的1/2计算。运用海伦公式计算。不过我试了所有方法仍然有一个点WA了,已经用while(1)实验出问题是出在交点在两圆心同侧的情况了。可能是精度问题原创 2015-02-07 23:09:00 · 795 阅读 · 0 评论 -
[codevs 1514] 书架
http://codevs.cn/problem/1514/题解:Splay,因为没办法根据给出的书的编号确定书的位置,也就没办法做到log(n)的查询,所以采用自底向上的伸展方式,那么就需要用pa数组记录节点的上个结点。算法实现上建立了两个虚拟节点来避免溢出——据HZWER。代码:原创 2015-02-04 22:52:06 · 712 阅读 · 0 评论 -
[codevs 1298] 凸包周长 [codevs 3201] 奶牛代理商 XI
题解:今天开始学习计算几何。 这是一道计算几何求凸包周长的模板题,采用Andrew算法。 第二道题改下输出即可。 最后凸包周长的求法注意第一个点和最后一个点是同一个。 代码100ms 3MB#include<cstdio>#include<cmath>#include<vector>#include<algorithm>using namespace std;const i原创 2015-02-07 16:00:39 · 939 阅读 · 1 评论 -
[codevs 1249] 多边形的面积
题解:模板,利用Cross叉积表示的是有向面积,同样可以求凹多边形的面积。 代码:总时间耗费: 5ms 总内存耗费: 256 kB#include<cstdio>#include<cmath>#include<vector>#include<algorithm>using namespace std;const int maxn = 100 10;int n;struct原创 2015-02-07 16:14:58 · 960 阅读 · 1 评论 -
[codevs 1302] 小矮人(2002年CEOI中欧信息学奥赛)
描述 矮人们平时有走亲访友的习惯。一天,矮人国要修一条高速公路,矮人们希望他们走亲访友的时候,能够不必穿越高速公路,这样会更安全一些。现在有M个高速公路的修建方案,请你判断这M条高速功能是否能满足矮人们的期望。也就是说给出平面上的N个点(矮人们的住所位置),对于M条直线(高速公路),依次判断这N个点是否在每条直线的同一侧。是输出GOOD,不是输出BAD。 题解 首先可以想出一个原创 2015-02-08 13:42:43 · 1105 阅读 · 0 评论 -
[codevs 1743] 反转卡片
http://codevs.cn/problem/1743/ 题解:思路:采用标记的方式减少操作。rev表示该节点及子树需要翻转。如果在kth()查询第k位置的卡片时走到这个节点o,就pushdown(o),把标记传到子节点,反转左右子节点。如果要反转的区间为[l, r],在rever操作中,将l-1伸展到根,再将r 1节点伸展到右节点。那么对应区间可以转化为ch[ch[o][1]][0]节点所原创 2015-02-07 11:47:34 · 1103 阅读 · 1 评论 -
[codevs 1343] 蚱蜢(省队选拔赛湖南)
http://codevs.cn/problem/1343/题解:本题splay基本操作:1.如果是左跳,比如从 x 左跳到 y,就相当于查询 [ y, x ) 区间的最大值,那么就把 y-1 伸展到根,把 x 伸展到根的右节点,那么根的右节点的左节点对应的就是这段区间。1.如果是右跳,比如从 x 右跳到 y,就相当于查询 ( x, y ] 区间的最大值,那么就把 x 伸展到根,把原创 2015-02-05 22:55:44 · 1573 阅读 · 0 评论 -
[POJ 1222] EXTENDED LIGHTS OUT
题目 http://acm.pku.edu.cn/JudgeOnline/problem?id=1222 描述 给你一个5行6列的矩阵分别表示30个灯,矩阵map[i][j]为1表示灯亮着, 0表示灯没亮. 要求你输出解决方案. press[i][j]为1表示按一下,0表示不按。使得最后状态为所有灯都熄灭。 分析 高斯消元法(Gaussian eliminati原创 2015-02-15 21:24:01 · 572 阅读 · 0 评论 -
[CODEVS 1173] 最优贸易
描述 http://www.codevs.cn/problem/1173/ 分析 官方解法 先考虑如果题目中的线路不会构成环, 那么问题可以简化成一个DP就可以解决的问题=> 先正着DP, 找出在每个点之前可以买进的最低的价格 minp ; 再倒着DP, 统计出在每个点之后可以卖出的最高价格 maxp , 取所有点中的minp - maxp 的最大值就是最大的收原创 2015-02-17 16:23:59 · 1344 阅读 · 0 评论 -
[codevs 2926] 黑白瓷砖(2002年安徽省队选拔赛)
描述 http://codevs.cn/problem/2926/ 题解: Polya定理的应用。 首先原创 2015-02-09 23:28:38 · 951 阅读 · 0 评论 -
[CODEVS 1244] 云中通信
描述 天空中有n朵云,在风吹之下以恒定速度v=(vx,vy) 向同一个方向持续移动,也就是说,当时间为t(t≥0)时,云上初始坐标为(x, y)的点移到坐标为( x + t*vx, y + t*vy)的位置。 为简单起见,我们假设云是多边形的(而且其顶点具有整数坐标)。多边形不一定是凸的,但是每个多边形的任意两条边不相交(允许具有公共的端点)。云和云可能会重叠。 地面上翻译 2015-02-21 15:12:10 · 1113 阅读 · 0 评论 -
[CODEVS 1050] 棋盘染色 2
描述 有一个5*N的棋盘,棋盘中的一些格子已经被染成了黑色,你的任务是对最少的格子染色,使得所有的黑色能连成一块。 http://codevs.cn/problem/1050/ 分析 CODEVS 题解里有个很良心的人, 我是看了他的才写的. http://codevs.cn/wiki/solution/?problem_id=1050 Soluti原创 2015-02-20 18:52:39 · 2022 阅读 · 0 评论 -
[CODEVS 1281] Xn数列
描述 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn http://codevs.cn/problem/1281/ 分析 比较裸的矩阵乘法题, 好久没做了, 写写思路 假设矩阵 A = { {a1, a2}, {a3, a4} }, B = { {b1, b2}, {b3, b4} }.原创 2015-02-20 22:12:41 · 1070 阅读 · 0 评论 -
[BZOJ 1001] 狼抓兔子
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1001 分析 这是道经典的对偶图问题, 平面图最大流问题可以转化为其对偶图的最短路问题. 转化的方法就是将每个三角形区域看作是一个点, 如果两个三角形区域有公共线, 就在两个结点之间连一条权值为公共线容量的边. 关于编号问题我定义了一个id数组. 表示以原创 2015-02-17 23:13:55 · 729 阅读 · 0 评论 -
[CODEVS 3037] 线段覆盖 5
描述 数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~10^18,每条线段有一个价值,请从n条线段中挑出若干条线段,使得这些线段两两不覆盖(端点可以重合)且线段价值之和最大。 分析 提供两种思路: 利用离散化. 因为这道题本来就是离散化的例题. 将点排序后依次赋值(1~2n, n为线段的条数), 再通过结构体里的信息将离散化后的点的坐标映射到线段上.原创 2015-02-18 16:15:13 · 738 阅读 · 0 评论 -
[CODEVS 3044] 矩形面积求并
描述 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) http://codevs.cn/problem/3044/ 分析 先贴个Matrix67的讲离散化的博客地址: http://www.matrix67.com/blog/archives/108 其实上面的博客讲的讲的就很清楚了. 就相当于把矩形用许多小矩形来代替. 这些小矩形都是有一边原创 2015-02-18 22:07:56 · 2996 阅读 · 0 评论 -
[CODEVS 1301] 任务分配
描述 有N位工作人员,同时有N项任务, 每人必须承担一项任务,若给出某人不能从事的某些任务, 问要安排好工作,共有多少种方案? http://codevs.cn/problem/1301/ 分析 容斥原理的应用. 先看看样例: 四个人: A, B, C, D A 不能选择: 2 B 不能选择: 2 3 C 不能选择: 3 4原创 2015-02-19 13:01:13 · 2172 阅读 · 1 评论 -
[CODEVS 3147] 矩阵乘法 2
描述 给出两个n*n的矩阵,m次询问它们的积中给定子矩阵的数值和。 http://codevs.cn/problem/3147/ 分析 直接 n3 的矩阵乘法肯定超时, 要采用前缀和优化 row[s1] … row[t1] col[s2] … col[t2] (s1, s2) – (t1, t2) row[x] * col[y]原创 2015-02-21 11:32:32 · 1715 阅读 · 1 评论 -
[CODEVS 1087] 麦森数
描述 计算2P-1的位数和最后500位数字 分析 有一个公式, 2^p 的位数是 p*lg2 以十为底 2 的对数. 证明 : 2p=10lg2p=10p∗lg2 2^p = 10^{lg2^p} = 10^{p*lg2} 10^(p*lg2) 的位数是数 p*lg2 + 1位.原创 2015-02-25 19:35:08 · 722 阅读 · 0 评论 -
[BZOJ 1012] 最大数maxnumber
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1012 分析 刚看以为是线段树或者是平衡树, 然后看了一种接近暴力的方法–单调队列. 感觉这个方法可以被卡住, 所以之后再发几种其他做法. 代码 https://code.csdn.net/snippets/607317原创 2015-02-24 17:33:16 · 963 阅读 · 0 评论