自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 poj1125Stockbroker Grapevine(最短路floyd)

这是一道很简单的floyd题目,题中说找到那个每个人到其他人最大的时间,然后从中找到最小值,直接一遍floyd就行,so easy#include <iostream>#include <string.h>using namespace std;const int INF=0x3f3f3f3f;int dis[205][205];int sum[205];int n;void prep

2016-05-30 12:45:16 325

原创 poj2240Arbitrage(最短路floyd)

这个题目是换钱和另一个有点类似,只不过这个没有手续费,这道题在读入的时候有点麻烦,我用的map和string,剩下的就好说了,看钱会不会变多,它没说从哪种变成哪种,那么就得是多源最短路用floyd,里面是汇率用乘法,然后看看是不是比原来的多就可以了#include <iostream>#include <map>using namespace std;string str[35],s1,s2;

2016-05-30 12:19:38 425

原创 poj1860Currency Exchange(最短路)

因为出的最短路专项,所以能想到,否则的话可能也想不到吧,最开始题意理解错了,以为是只要货币的数量大了就行,然后就spfa找只要超过了给的val就行啊,结果一直wa,后来发现应该是两种情况,第一是成正环,就是在这个环里,值会一直增加,超过n次就证明一定是存在这种环的,那么它变回原来的货币肯定会增大,第二种是不成正环的,就是正常操作一遍之后,会使原来的数变大#include <iostream>#in

2016-05-28 21:36:47 647

原创 hdu3555Bomb(数位dp&&记忆化搜索)

这道题目其实是不要62的简化版,说白了就是找含49的个数,详情#include <iostream>#include <string.h>long long dp[20][5];int digit[20];using namespace std;//dp[i][0]表示不含49的数字//dp[i][1]表示首位为9,不含49的数字//dp[i][2]表示含49的数字void prep

2016-05-22 18:35:53 802 2

原创 hdu2089不要62(数位dp)

这个题目我写了两天,刚开始按照固定套路dp【i】【j】表示i位数,j为首位,然后先求不吉利的,然后再抠掉,后来发现很麻烦,然后想那就直接正着求算了,然后j表示末位,表很容易打出来了,然而查的时候一脸懵逼,没办法后来参照了别人的博客,详见http://www.myext.cn/c/a_11441.html,写的真好,下面代码有讲解#include <iostream>#include <string

2016-05-18 19:11:07 385

原创 CF22E 加最少的边使原有向图边成强连通图

这道题千万不要一般化:先求强连通分量再把图化为 DAG 来做(我们能够很方便的得到需要添加的边的数量,但是加哪些边会变得很麻烦) 给每个定义一个起点和终点,然后按照下面的做就行了: 当整个图只有一个环的时候,不可能通过加边使得其成为强连通图! 链接相邻的两个分块(分块 A 的终点连向分块 B 的起点) 对于分块中不是起点的入度为 0

2016-05-12 22:08:47 1319

原创 coderforces 22C 构图水题

这题实际上跟割点真没啥关系,题意:给n个点,m条边,割点为v的一个图,你试图将它还原,不能输出-1,能就将可行的一组输出即可,还有图为联通图 思路:这跟割点没什么关系,直接想想就可以写出来了,先判断能不能组成这样的图,对于一个有一个割点的联通图,如何分配可以使边最多呢,以割点为分界线,左边一部分,右边一部分,可以很直白的知道左边只有一个的时候加的边最多,可以列出个式子,这样右边最多可以为(n-1)

2016-05-11 20:41:25 301

原创 poj1276Cash Machine(多重背包)

我的理解:首先对于一件物品来说,如果这个物品的容量数目已经大于背包的总容量了,那么这与完全背包问题没有区别了。因为完全背包问题就是可以任意的往背包里面放物品,而这时这个物品的容量数目已经大于背包总容量了,所以,也就相当于在背包总容量的范围内,这个物品是可以支持 任意地往背包里面放物品。 如果这个物品的容量*数目小于背包的总容量,那么正常情况下,需要一件一件往里面放找最大值的。但是它的方法是:将第i

2016-05-11 11:59:29 491

原创 poj2942圆桌骑士(点双连通分量+二分图染色法判奇圈)

之前一直不明白点双连通分量能用来干嘛,比如边双连通分量可以问加几条边能变成边双连通,这个题目是这样的,每个圆桌会议至少三个骑士参加,因为需要表决意见,所以骑士数目必须是奇数个,直到那些骑士互相憎恨,也就是不能坐在一起的,把能坐在一起的建边,求无法参加任何会议的骑士的个数,重点是任何会议,这点非常关键,这道题之前一直卡在这里,还有就是有的人属于好几种双连通分量,所以全部标记之后再减掉比较好,至于奇数个

2016-05-10 22:03:00 1929

原创 51nod1154回文串划分

这道题目刚开始想错了,本来打算每次找到最大的回文串,结果自己给自己驳倒了,比如dabbbbbdb,最长回文子串是bbbbb,结果四个落单,一共是五个,而如果把最后的bdb放在一组,就一目了然了,4个,所以这种是不行的,到底该如何做呢 dp[j]代表了读到第j个字符的时候出现的回文串最小有多少个 k#include <iostream>using namespace std;const int

2016-05-10 21:53:59 430

原创 zoj2588(无向图求割边)

这道题其实就是一道很简单的割边的模板题,不过需要处理重边导师意见有点麻烦的事#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;const int MAXN=20005;const int MAXM=200005;struct edge{

2016-05-10 21:44:48 1173

转载 双连通分量

本博客转载自http://blog.csdn.net/tsaid/article/details/6877404 [点连通度与边连通度]在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。一个图的点连通度的定义为,最小割点集合中的顶点数。类似的,如果有一个边集合,删除这个边集合以后,原图变成多个连通块,就称这个

2016-05-10 15:04:49 439

原创 hdu4635Strongly connected 【求最多加多少边仍不是强连通分量】

这道题其实做完之后发现几乎就是模板题,然而之前有个地方想了一周一直拧不过来,题目是最多加多少条边仍然不是强连通图,也就可以理解为再多加一条边就无论如何都是强连通图,等价于最多去掉几条边使之仍未强连通图,当此时再多去一条边的时候,等价于最少去掉几条变使原图不强连通,好了终于绕完了,都给我自己绕蒙了,那么我们是最少去掉多少条边使原图不强联通,我们先把它变成一个完全图,然后再减去题目中给的边 ans=n

2016-05-08 21:48:12 564

原创 poj1068Parencodings

水题一道,分两种情况考虑,当右括号前面是左括号直接就是1,否则就加入栈然后往前找#include <iostream>#include <string.h>#include <stack>using namespace std;int a[105],b[105];char s[105];int T,n;stack<int>q;int main(){ cin>>T;

2016-05-08 14:05:25 320

原创 poj2159Ancient Cipher

水题一道,然而废了不少功夫,频率一样就行,排个序就OK了#include <iostream>#include <string.h>#include <algorithm>using namespace std;string s1,s2;int a1[150],a2[150];int main(){ while(cin>>s1>>s2) { int an

2016-05-08 13:59:30 337

转载 Tarjan算法求至少要添加几条边才能使无向连通图变为边双连通图。

本博客转载自http://blog.csdn.net/lyy289065406/article/details/6762370 首先建立模型: 给定一个连通的无向图G,至少要添加几条边,才能使其变为双连通图。模型很简单,正在施工的道路我们可以认为那条边被删除了。那么一个图G能够在删除任意一条边后,仍然是连通的,当且仅当图G至少为双连通的。 PS:不要问我为什么不是3-连通、4-连通…人

2016-05-07 20:32:14 2230

原创 poj3352Road Construction(边双连通分量)

大致题意: 某个企业想把一个热带天堂岛变成旅游胜地,岛上有N个旅游景点,任意2个旅游景点之间有路径连通(注意不一定是直接连通)。而为了给游客提供更方便的服务,该企业要求道路部门在某些道路增加一些设施。 道路部门每次只会选择一条道路施工,在该条道路施工完毕前,其他道路依然可以通行。然而有道路部门正在施工的道路,在施工完毕前是禁止游客通行的。这就导致了在施工期间游客可能无法到达一些景点。 为了在施

2016-05-07 20:28:15 501

原创 poj1523(割点)

这道题是求哪个点是割点,并且能把原图分成几块,add_block数组是求增加的所以还需要加1,然后就是我一直在PE,后来发现需要每输出一组后,有一个空行#include <iostream>#include <string.h>#include <stdio.h>using namespace std;const int MAXN=1005;const int MAXM=0x3f3f3f;

2016-05-06 14:57:01 752

原创 poj1144Network 无向图求割点Tarjan

n个点,组成一个无向图,求这个图中割点的数量。模板题。 只是这道题在输入数据的时候有点麻烦,如样例中,第一组数据有五个点,5 1 2 3 4 表示5这个点与1 2 3 4 点相连。其中这个图的割点只是5这个点。第二组数据6个点,2 与1 3 5相连,5与2 4 6相连,其中2点与5点都是割点。 有两类节点可以成为割点:对根节点u,若其有两棵或两棵以上的子树,则该根结点u为割点; 对非叶子节

2016-05-06 12:50:49 849

原创 uva11383(KM算法)

这道题是根据一个n*n的矩阵每个格子里有一个正整数w(i,j)你的任务是确定每行一个整数row(i)每列一个整数col(i),对每个格子都有w(i,j)<=row(i)+col(j)所有row(i)和col(i)和尽量小。思路:本题利用KM算法l(x)+l(y)>=w(x,y)的性质直接可以知道得出的顶标之和即为最小的。#include <iostream>#include <stdio.h>#

2016-05-04 14:59:37 482

原创 51nod1006最长上升子序列(求路径)

这道题目以前完全用char写,现在在尝试用string去写,感觉还不错,思路如下: 我们用Ax表示序列A的连续前x项构成的子序列,即Ax= a1,a2,……ax, By= b1,b2,……by, 我们用LCS(x, y)表示它们的最长公共子序列长度,那原问题等价于求LCS(m,n)。为了方便我们用L(x, y)表示Ax和By的一个最长公共子序列。让我们来看看如何求LCS(x, y)。我们令x表示子

2016-05-02 17:23:54 774

原创 light oj 1031(区间dp+博弈)

这个题目后面的套路跟石子归并写的差不多,然而这里存在一个小的博弈,就是每次取得最优,dp[i][j] 表示在区间i~j上A比B多的分数值,由于二者都采取最优策略,故可以枚举i~j之间的的数k,取子区间i~k和k+1~j中的最大值(子区间的最大值表示B比A多的分数,因为A取完之后就要改B取了,也是最优的策略), 动态转移方程式为dp[i][j]=max(dp[i][j],max((sum[k]-s

2016-05-02 15:42:42 309

空空如也

空空如也

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

TA关注的人

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