[BZOJ1726 Roadblocks]
摘要:[关键字]:图论 第k短路[题目大意]:求出严格次短路。//===================================================================================[分析]:首先先说K短路的求法。利用A*去求,首先先spfa处理出T到每个点的距离作为A*中的h[],在从起点开始进行搜索,g[]是从起点到当前点已经走过的距离,f[i]=g[i]+h[i]。每次选取最小的f出队并更新其他节点。可以证明一个节点出队k次它的f值就是从s到它的第k短路的长度(非严格)。每次出队是已经出的超过k次的就忽略,如果t点出过k次就算求出了第k短路。如
阅读全文
posted @
2012-04-14 00:39
procedure2012
阅读(273)
推荐(0)
[BZOJ1232 安慰奶牛]
摘要:[关键字]:最小生成树[题目大意]:在一个图里找到一颗生成树,要求选定一个根后从这个根到每一个点都走一边每经过一个点i需要停留di分钟每条边需要ei分钟根还要额外加两遍所得值最小。//====================================================================================================[分析]:因为每加入一条边(x,y),所增加的代价就是ei+dy+ei+dx,又因为所有边都加入后作为根的那个点少加了一次为了让最终结果最小需要选取最小的点作为根并让ans加上它的权值。所以可以以权值最小的点位起点,
阅读全文
posted @
2012-04-14 00:29
procedure2012
阅读(477)
推荐(0)
[USACOContest2010 慢慢游]
摘要:[关键字]:数据结构 DFS序列[题目大意]:有一棵树,每头牛从一号节点出发走到另一个节点上。路径上每有一个有牛的节点,那他就会减慢一次速度,问每个牛会减慢多少次速度。//======================================================================================[分析]:首先对树进行先序遍历,然后对每个节点编号记录每个节点v进入时的编号x和它所有子树中编号最大的那个y,这样以v为根的子树就对应了一段连续的区间。每有一个牛走到他所对应的节点v上,v的子树上所有节点的减慢次数就会+1,然后就可以利用树状数组来进行连续
阅读全文
posted @
2012-03-18 15:22
procedure2012
阅读(190)
推荐(0)
[HNOI2003 多边形]
摘要:[关键字]:计算几何 数学[题目大意]:找出给定的简单多边形的核的面积。//====================================================================================[分析]:一个裸的求半平面交的题目,可以用来练习模板。O(n2)算法:每次枚举一条边去切割当前剩余的多边形,直到所有边都枚举过一遍,剩余的多边形面积可以用三角剖分,然后利用叉积求出每个三角形的有向面积累加。[代码]:View Code #include<iostream>#include<cstdio>#include<cs
阅读全文
posted @
2012-03-13 10:41
procedure2012
阅读(264)
推荐(0)
[HNOI2006 Hero超级英雄]
摘要:[关键字]:图论[题目大意]:有n道题只能按顺序回答,每到题只能用两个锦囊中的一个,问最多答上多少道题。//=================================================================================================[分析]:一开始看着和一道POJ上的2-sat很像,想都没就开始做,然后我就2了……又仔细看了一遍2-sat的定义:(1)、有N各组每组只能出一个。(2)、某两个之间不能同时选。这道题明显不符和第一的条件,然后仔细一看居然是二分图!每到题想每个可以解开它的锦囊连边,然后求最大匹配。注意的是这道题是
阅读全文
posted @
2012-03-12 07:50
procedure2012
阅读(624)
推荐(0)
[HNOI2006 Starswar星球大战]
摘要:[关键字]:并查集[题目大意]:有n个点m条边,要炸毁k个点,问按炸毁顺序炸毁每个点后有几个联通块。//==============================================================================================[分析]:正着做每次还要删边求联通块复杂度很高。而倒着做先吧所有点都干掉,然后并查集求出联通块个数,每次回复一个点然后合并联通块并更新当前答案,然后倒着输出答案。[代码]:View Code #include<iostream>#include<cstdio>#include<
阅读全文
posted @
2012-03-12 07:40
procedure2012
阅读(173)
推荐(0)
[BZOJ1787 Meet]
摘要:[关键字]:LCA[题目大意]:求出一个集合点使树中三个点到这个点距离总和最小//=============================================================[分析]:无论怎么建树,这个集合点一定在这三个点两两的LCA之间,所以就转化成求LCA的问题,但这道题用离线的tarjan算法十分麻烦,所以就用的LCA转RMQ的在线算法。自我感觉代码写的相当给力:非递归+STL,可惜MLE……[代码]:View Code #include<iostream>#include<cstdio>#include<cstdlib>
阅读全文
posted @
2012-03-11 23:31
procedure2012
阅读(187)
推荐(0)
[Vijos 包裹快递]
摘要:[题目来源]:vijosOrz教主第一次模拟赛[关键字]:图论 二分[题目大意]:给出每个点最早到达时间和最晚到达时间及该路段路程,求出最大速度最小//=====================================================================================================[分析]:二分答案+验证。但是由于浮点类型,所以要注意:1、精度问题;2、二分的停止条件。精度问题可以用extended解决,停止条件可以设定为l与r的差值,在要求精度以下。[代码]:View Code 1 var 2 n: longint...
阅读全文
posted @
2011-11-10 23:53
procedure2012
阅读(217)
推荐(0)
[VIjos 字符串还原]
摘要:[题目来源]:vijsoOrz教主第一次模拟赛[关键字]:模拟[题目大意]:每个字符串有三种变换方法:1、倒序;2、所有字母后移k个(k未知);3、所有字母前以k个(k未知),给出三个同一字符串变换后的,求出原字符串。//=====================================================================================================[分析]:因为三个变换法则中只有第一个可以确定原串,所以枚举每一个作为倒序后的字符串,还原后与另外两个匹配看是否符合2、3。[代码]:View Code 1 program .
阅读全文
posted @
2011-11-10 23:46
procedure2012
阅读(287)
推荐(0)
[Vijos 比赛]
摘要:[题目来源]:Vijos@潘帕斯雄鹰生日模拟赛T3[关键字]:数学[题目大意]:n个队伍进行循环赛,给出第m号队在每一局里对阵的对手,求出第T轮对阵表。//===================================================================================================[分析]:IN3 1 2213 队伍 1 2 3第一场 2 1 3第二场 1 3 2第三场 3 2 1IN5 2 413254 队伍 1 2 3 4 5第一场 2 1 3 5 4第二场 5 3 2 4 1第三场 4 2 5 1 3第四场 1 5
阅读全文
posted @
2011-11-10 23:37
procedure2012
阅读(163)
推荐(0)
[Vijos 拼图]
摘要:[题目来源]:vijos@潘帕斯雄鹰生日模拟赛T2[关键字]:搜索[题目大意]:给出n个不规则图形,要求用所有的图形拼成一个正方形是否可行,可行则输出方案。//=====================================================================================================[分析]:虽然一眼就能看出搜索但是要想实现却并不是太简单。就是枚举每一个图形可以放在哪,然后放置在搜索下一个。判断时要利用给出的矩形判断。[代码]:View Code 1 type 2 rec = record 3 x...
阅读全文
posted @
2011-11-10 23:28
procedure2012
阅读(221)
推荐(0)
[Vijos 飞翔]
摘要:[题目来源]:vijso@潘帕斯雄鹰生日模拟赛T1[关键字]:动态规划[题目大意]:一个n*m的矩形,从(1,1)飞到(n,m),中间有些格子可以沿对角线穿过,问最短。//=====================================================================================================[分析]:首先可以明确地,要是有可以抄近路的格子则一定走它会更优,所以只要找到沿途可以经过的最多的这样的格子,再用总共要路过的格子减然后计算。而找最多的这样的格子就是找一个x和y都上升的最长格子序列,就是最长上升序列。[代码]
阅读全文
posted @
2011-11-10 23:22
procedure2012
阅读(204)
推荐(0)
[Tyvj1450 GF打Dota]
摘要:[题目来源]:tyvj二月月赛[关键字]:次短路径[题目大意]:如果p=1则找出仅小于最短路径长度的路径长度,否则找出虽短路径。//============================================================================================================[分析]:因为是无向图所以就从1到n找一遍最短路记录1到每个点距离为d1[],从n到1找一遍最短路记录n到每个点距离为d2[]。则此时仅次于最短路径长度的路径长度为:max(d1[x]+d2[t].t+e[t].d )且d1[x]+d2[e[t].y]
阅读全文
posted @
2011-11-09 17:47
procedure2012
阅读(218)
推荐(0)
[Tyvj1228 有道搜索框]
摘要:[题目来源]:tyvj1128[关键字]:字典树[题目大意]:给出一个字典。接着输入字符串s查询最多前8个依次为前缀的字典中的单词,如没有只输出s。//============================================================================================================[分析]:用字典树,首先将每个单词插入字典树,然后寻找到s插入字典树后在字典树中的节点,以此为起点进行dfs,如果s无法插入树中说明没有依次为前缀得单词。[代码]:View Code 1 program Project1; 2 t.
阅读全文
posted @
2011-11-09 17:35
procedure2012
阅读(258)
推荐(0)
[Tyvj1114 搭建双塔]
摘要:[题目来源]:VIjos[关键字]:动态规划[题目大意]:用n块水晶搭建两个塔,要求双塔必须一样高,问最大能达到的高度为多少。//============================================================================================================[分析]:用f[i,j]表示使用前i个水晶,建起高度差为j的双塔时,较矮的那个塔的最大高度是多少。这样的话,对于每一块水晶都有三种决策,不使用,放到高塔上,放到矮塔上.而放到矮塔上会有两种情况,一是使矮塔的高度超过了高塔,二是没有超过。具体如下:if f
阅读全文
posted @
2011-11-09 17:26
procedure2012
阅读(356)
推荐(0)
[Vijos1082 丛林探险]
摘要:[题目来源]:vijos1082[关键字]:最短路[题目大意]:n个点m条边k的体力,每条边有一个长度和一个费体力值,能否从st走到ed,若能走到则最短走多少。//=====================================================================================================[分析]:就是用spfa求一遍最短路,只是在松弛时要加上一条:如果走此边不会耗费超过k的体力。至于图的存储结构,可以用邻接表或前向星。[代码]:View Code 1 type 2 rec = record 3 x...
阅读全文
posted @
2011-11-05 21:12
procedure2012
阅读(270)
推荐(0)
[Tyvj1108 守望者的逃离]
摘要:[题目来源]:NOIP2007普及组[关键字]:贪心[题目大意]:守望者的跑步速度为17m/s,守望者拥有闪烁法术,可在1s内移动60m,每次使用闪烁法术都会消耗魔法值10点。守望者的魔法值恢复的速度为4点/s,只有处在原地休息状态时才能恢复。现在已知守望者的魔法初值M,他所在的初始位置与岛的出口之间的距离S,岛沉没的时间T。计算如何在最短的时间内逃离荒岛,若不能逃出,则输出守望者在剩下的时间能走的最远距离。//======================================================================[分析]:AC做法是贪心。易证闪烁最然需要回
阅读全文
posted @
2011-11-01 11:04
procedure2012
阅读(1469)
推荐(1)
[Tyvj1111 舞会]
摘要:[题目来源]:Tyvj P1111[关键字]:有向图的连通分量[题目大意]:给出一个图,求它的强连通分量数量//============================================================================================================[分析]:据说此题数据没有按有向图的强连通分量给,并查集就能过,但我还是用trajan做的(水题,练习一下)。tarjan算法和求无向图的割点、桥样子差不多,其本质也是一样的,利用dfs树和时间戳来判断,只不过比那两个算法多了一个栈,求图的连通性的还有floodfill算
阅读全文
posted @
2011-10-27 11:56
procedure2012
阅读(234)
推荐(0)
[Rq 333]发明测试数据
摘要:【题目】:发明测试数据【来源】:Rq333【关键字】:kurscal逆推//================================================================================================【分析】:根据生成树的步骤,先找最小边然后判断是否在一个集合中,再加入.所以先对所有边排序,则这条边的x,y所在集合的每两个点的连边(除此边)的值最小是该边权值加一。inc(ans,(num[x]*num[y]-1)*(e[t].d+1));【小结】:反向思维//==================================
阅读全文
posted @
2011-10-20 02:02
procedure2012
阅读(313)
推荐(0)
[TYVJ1307 联络员]
摘要:【题目】:联络员【来源】:Tyvj1307【关键字】:图论 必连边//================================================================================================【分析】:克鲁斯卡尔,先将必连边加入生成树中,再用剩下的边构建生成树.也可以先将必连边的全加入答案,然后改为零.在对所有边找最小生成树.【小结】:_______________________________________________________//=======================================
阅读全文
posted @
2011-10-20 01:40
procedure2012
阅读(194)
推荐(0)