10 2013 档案

Catenyms
摘要:poj2337:http://poj.org/problem?id=2337题意:给定一些单词,如果一个单词的尾字母与另一个的首字母相同则可以连接。问是否可以每个单词用一次,将所有单词连接,可以则输出字典序最小的序列。 题解:并查集+欧拉通路+贪心思维+dfs ,这一题我也是参考了别人的代码。 ps:vector的使用 ,内部堆栈的使用 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 struct Node{ 9 int v; 10... 阅读全文

posted @ 2013-10-27 20:02 天依蓝 阅读(163) 评论(0) 推荐(0)

滑雪
摘要:poj1088:http://poj.org/problem?id=1088题意:给出矩阵地图,值为高度,找一条最长的高度递减的路径。题解:动态记忆递归搜索,在递归最底层求出最优解,记录,自底向上的方式求出最优解。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int map[102][102],cnt[102][102]; 7 int sum,temp,n,m; 8 int DFS(int x,int y){ 9 int max1=0;10 if(cnt[x][y]>0){... 阅读全文

posted @ 2013-10-27 19:18 天依蓝 阅读(176) 评论(0) 推荐(0)

Find a multiple
摘要:poj2356:http://poj.org/problem?id=2356题意:给定n个数,从中选出连续的若干个,使得和为n的倍数。多解时输出任意解。分析:设sum[0]=0,sum[i]表示数列中第1~i个数的和对n取余的结果。那么现在有sum[0~n],n+1个整数,分布在区间 [0,n-1]上的n个整数点上,则至少有两个数会分布在同一个整数点,即存在sum[i]==sum[j]且i!=j。这样以来第i+1~j个数即为 所求。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int s[10003] 阅读全文

posted @ 2013-10-26 18:16 天依蓝 阅读(158) 评论(0) 推荐(0)

敌兵布阵
摘要:hdu1166:http://acm.hdu.edu.cn/showproblem.php?pid=1166题意:n个阵营一字排开,每个初始有a[i]个人。现有两种操作:Q a b 查询[a,b]之间总人数并输出A/S a b 在a号位添加/删除b个人题解:用线段树维护,就是单点更新,区间查询。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int n,a,b; 7 struct Node{ 8 int left;//左二子 9 int right;//右儿子 10 int ... 阅读全文

posted @ 2013-10-25 15:11 天依蓝 阅读(162) 评论(0) 推荐(0)

Rabbit hunt
摘要:poj2606:http://poj.org/problem?id=2606给你n个点,求在一条直线上的点最多有几个。题解:直接暴力,但是要注意,横坐标相等的情况,这是不能求斜力,只能特殊处理。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 struct Node{ 7 int x; 8 int y; 9 }node1[102];10 int n;11 int ans;12 double KK(Node a,Node b){13 if(a.x!=b.x)14 ret... 阅读全文

posted @ 2013-10-24 09:49 天依蓝 阅读(363) 评论(0) 推荐(0)

Play on Words
摘要:poj1386:http://poj.org/problem?id=1386题意:给你n个单词,问你是否能够通过调整单词的顺序存在这样的一个序列,使得 每个单词的首字母是前一个单词的尾字母。题解:每个单词可以看做从首字母连向尾字母的一条边,然后就是整个图的欧拉路径。统计每个点的入度和初度,如果基图连通,并且只有两个点入度和初度不等,并且相差分别为1,-1,就存在这样的路径,否则则没。 连通性,可以用并查集. 处理完之后,看每个点的父亲是否相等来判断是否连通。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; . 阅读全文

posted @ 2013-10-23 08:49 天依蓝 阅读(314) 评论(0) 推荐(0)

Door man
摘要:poj1300:http://poj.org/problem?id=1300题意:给你n个房间,房间之间有一些门,房间是按0~~n-进行编号的。然后给出一些房间的之间门,n行,每行的数字表示该们与其它们之间是否有门,而且只表示出比他大的房间号。然后给你一个起点,问你从起点出发,然后经过所有的房间回到0点,房间之间可能有多道门。题解:题目描述的可能不是很清楚,题目是要求一条欧拉回路。源点是0点,可以从起点到达源点之后,看看能否经过每个房间回到0点。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int r 阅读全文

posted @ 2013-10-22 15:59 天依蓝 阅读(328) 评论(0) 推荐(0)

Borg Maze
摘要:poj3026:http://poj.org/problem?id=3026题意:在一个y行 x列的迷宫中,有可行走的通路空格’ ‘,不可行走的墙’#’,还有两种英文字母A和S,现在从S出发,要求用最短的路径L连接所有字母,输出这条路径L的总长度。题解:一格的长度为1,而且移动的方法只有上、下、左、右,所以在无任何墙的情况下(根据题意的“分离”规则,重复走过的路不再计算因此当使用prim算法求L的长度时,根据算法的特征恰好不用考虑这个问题(源点合并很好地解决了这个问题),L就是最少生成树的总权值W由于使用prim算法求在最小生成树,因此无论哪个点做起点都是一样的,(通常选取第一个点),因此起点 阅读全文

posted @ 2013-10-19 14:05 天依蓝 阅读(227) 评论(0) 推荐(0)

Agri-Net
摘要:poj1258:http://poj.org/problem?id=1258题意:生成树的模板题。简单题。 1 #include 2 #include 3 #include 4 #include 5 #define INF 100000000 6 #define MAXN 103 7 using namespace std; 8 int n,m; 9 int Edge[MAXN][MAXN];10 int lowcost[MAXN];11 int nearvex[MAXN];12 void prim(int u0){13 int i,j;14 int sumweight=0;1... 阅读全文

posted @ 2013-10-18 19:11 天依蓝 阅读(184) 评论(0) 推荐(0)

Highways
摘要:poj1751:http://poj.org/problem?id=1751题意:给你n个城市,每个城市的坐标给你,然后为了是每个城市都连通,需要在已经建了一些街道额基础上,再次建一些街道使其连通,求使得所建街道最短的那些边。题解:直接求一棵生成树,把已经建好的边的边权设置为0,用prim走一遍。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #define INF 100000000.0 7 using namespace std; 8 struct Node{ 9 int x;10 int y;11 }no... 阅读全文

posted @ 2013-10-18 18:48 天依蓝 阅读(185) 评论(0) 推荐(0)

Truck History
摘要:poj1789:http://poj.org/problem?id=1789题意大概是这样的:用一个7位的string代表一个编号,两个编号之间的distance代表这两个编号之间不同字母的个数。一个编号只能由另一个编号“衍生”出来,代价是这两个编号之间相应的distance,现在要找出一个“衍生”方案,使得总代价最小,也就是distance之和最小。题解:问题可以转化为最小代价生成树的问题。因为每两个结点之间都有路径,所以是完全图。 此题的关键是将问题转化为最小生成树的问题。每一个编号为图的一个顶点,顶点与顶点间的编号差即为这条边的权值,题目所要的就是我们求出最小生成树来。这里我用prim算 阅读全文

posted @ 2013-10-17 22:55 天依蓝 阅读(249) 评论(0) 推荐(0)

Arctic Network
摘要:poj2349:http://poj.org/problem?id=2349题意:有卫星电台的城市之间可以任意联络。没有卫星电台的城市只能和距离小于等于D的城市联络。告诉你卫星电台的个数S,让你求最小的D.题解: 生成最小生成树,去掉最长的S条边后,剩下最长的边就是D.也就是求最小生成树中第S+1长的边。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #define INF 100000000.0 7 using namespace std; 8 int cas,x,y,top; 9 int n,s;10 double low 阅读全文

posted @ 2013-10-17 22:29 天依蓝 阅读(213) 评论(0) 推荐(0)

QS Network
摘要:zoj1586:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1586题目大意:最小生成树,不只算两点之间的费用,还要算点的费用,并不是个点只算一次费用,而是每出现一次算一次。题解:其实只需要在算距离时,把两点的距离加入其中在排序就行了。 1 #include 2 #include 3 #include 4 #include 5 #define INF 100000000 6 using namespace std; 7 int n,cas; 8 int g[1002][1002]; 9 int lowcost[100 阅读全文

posted @ 2013-10-17 12:39 天依蓝 阅读(281) 评论(0) 推荐(0)

Building a Space Station
摘要:poj2031:http://poj.org/problem?id=2031题意:就是给出三维坐标系上的一些球的球心坐标和其半径,搭建通路,使得他们能够相互连通。如果两个球有重叠的部分则算为已连通,无需再搭桥。求搭建通路的最小费用(费用就是边权,就是两个球面之间的距离)。题解:其实就是图论的最小生成树问题球心坐标和半径是用来求 两点之间的边权 的,求出边权后,把球看做点,用邻接矩阵存储这个无向图,再求最小生成树,非常简单的水题把球A和球B看做无向图图的两个结点,那么边权 = AB球面距离 = A球心到B球心的距离 – A球半径 – B球半径 .注意若边权 2 #include 3 #inclu 阅读全文

posted @ 2013-10-16 16:58 天依蓝 阅读(127) 评论(0) 推荐(0)

Constructing Roads
摘要:poj2421:http://poj.org/problem?id=2421题意:这一题也是最小生成树,不过它要求修的路在下面还有一行是已经修的路所以将其权值赋值为零。题目给的数值的意思是每个点离其他点的距离 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int n,q,num,pa[102],cnt,sum; 8 int g[101][101],a,b; 9 struct Node{10 int u;11 int v;12 int w;13 boo... 阅读全文

posted @ 2013-10-16 16:53 天依蓝 阅读(150) 评论(0) 推荐(0)

Networking
摘要:poj1287:http://poj.org/problem?id=1287题意:平面上有许多点,又有许多边。每条边有一定的长度,且只会连接两个不同的点。现需要从这些边中选择某些边,使得尽可能多的点直接或间接相连。同时,又要选取的边的总长度最小。题解:本题就是去除重边,然后kruska运用。去重时候,我采用一个二维数组选取最小的边放进数组,然后遍历数组,如果有边则struct存入要处理的边。但是,看了别人的看法;程中可无视重边,因为排序之后,每次总是把最小的边加入,而且没两个点只能加一次,所以可以无视。 1 #include 2 #include 3 #include 4 #include 5 阅读全文

posted @ 2013-10-16 12:57 天依蓝 阅读(202) 评论(0) 推荐(0)

Jungle Roads
摘要:poj1251:http://poj.org/problem?id=1251题意:求n个村庄之间的最小生成树。题解:建好图,然后之间kruska直接解题。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int n,num,k,cnt,sum,tt,next1; 7 char s1,s2; 8 int pa[28]; 9 struct Node{10 int u;11 int v;12 int w;13 bool operator=0;s=pa[s]);24 whi... 阅读全文

posted @ 2013-10-15 21:48 天依蓝 阅读(185) 评论(0) 推荐(0)

Network
摘要:poj1861:http://poj.org/problem?id=1861题意::求一个最小生成树,边和边权都给出了,只是输出,要求输出最大权值的边的权值,边的条数以及都是什么边 题解:直接用kruska,求最小生成树,最大边,为最后加入的边。边数为n-1;然后依次输出生成树。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const int MAXN=1002; 8 int n,m,num,pa[MAXN],top,counts[15003];//分别标记点数,边数,等 9 . 阅读全文

posted @ 2013-10-15 20:50 天依蓝 阅读(215) 评论(0) 推荐(0)

Swordfish
摘要:zoj1203:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1203题意:给定平面上N个城市的位置,计算连接这N个城市所需线路长度总和的最小值题解:每两个点之间建一条边,然后求这一棵最小生成树。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int n,pa[102],cnt,num;//分别记录点的个数 ,并查集,边的个数,以及处理的边的个数 8 struct Node{ 9 double ... 阅读全文

posted @ 2013-10-15 16:33 天依蓝 阅读(222) 评论(0) 推荐(0)

Oil Deposits
摘要:hdu1241:http://acm.hdu.edu.cn/showproblem.php?pid=1241题意:就是找出有多少块有石油的区域,就是数组中的@,这边相邻指的是是周围的八个位置。题解: dfs,从一块油田的位子开始,朝着与他相邻的8个方向收索,遇到油田就把它变成不是油田,并往下继续。遍历一下,就知道有多少了 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 char map[102][102]; 7 int m,n; 8 void dfs(int i,int j){ 9 if(im|... 阅读全文

posted @ 2013-10-13 11:51 天依蓝 阅读(164) 评论(0) 推荐(0)

Tempter of the Bone
摘要:hdu1010:http://acm.hdu.edu.cn/showproblem.php?pid=1010题意: 输入一个n*m的迷宫,和一个T:可以在迷宫中生存的最大时间。S为起点,D为终点。并且,每个格子只能踩一次,且只能维持一秒,然后该块地板就会塌陷。所以你必须每秒走一步,且到D点时,所用时间为T。用深搜。解题思路: 用深收,但是直接用深收会超时的,必须加上剪枝这里要用奇偶剪枝的方式,减少收索次数。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 char map[8][8]; //记录原来的地图 阅读全文

posted @ 2013-10-13 11:49 天依蓝 阅读(177) 评论(0) 推荐(0)

Gnome Tetravex
摘要:zoj1008:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1008题目意思是有一个游戏,即给出一个图,该图是由n*n个小正方形组成,每个小正方形又由4个三角形组成,要求用这n*n个小正方形拼成一个图,该图的每个小正方形的相邻的三角形的中间的数是相同的题解:dfs从左到右边,从上到下,一个一个放,并且进行判断,是否合理,如果合理就放置,反之则回溯。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int map[26][4]; 阅读全文

posted @ 2013-10-13 11:47 天依蓝 阅读(299) 评论(0) 推荐(0)

Multiple
摘要:poj1465:http://poj.org/problem?id=1465题意:给你一个数n(0~4999);以及m个不同十进制的数,问有这些十进制数组成的最小的n的倍数是多少。如果有则输出,没有就输出0;题解:此题用BFS 。。这个题好在 用 余数判重剪枝。。BFS 如果不加以剪枝,一定会搜索的情况会很庞大。所以应该用余数判重 。为什么可以用余数判重? A=a*N +e 即A%N =e B= b*N+e即B%N=e当A B mod N的余数相同时,如果先出现A 。在A 后加上一个数 i 时 , 新的数 C = 10 *a*N + 10 *e+i;同样 B后加上数 i 时 , D = 10* 阅读全文

posted @ 2013-10-13 11:10 天依蓝 阅读(338) 评论(0) 推荐(0)

Rescue
摘要:hdu1242:http://acm.hdu.edu.cn/showproblem.php?pid=1242题意:给你一个n*m的矩阵,代表n*m个方格,每个方格可能是a,你的目的地,r你的起点,x警卫,#墙壁‘。’道路。每次你只能走一步,上下左右,且每一步花费一分钟,如果有路可以直接走,如果是x就必须杀死他才能走,且杀死他也要花费一分钟,遇到墙壁就不能走问你从起点到终点,最短的时间,如果不能就输出那么一句话。题解:用bfs,广收。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace st... 阅读全文

posted @ 2013-10-13 11:07 天依蓝 阅读(228) 评论(0) 推荐(0)

Knight Moves
摘要:poj2243:http://poj.org/problem?id=2243题意:给定象棋棋盘上的两个位置a,b,计算马从a到b所需要的步数的最小值。题解:把整个棋盘看成一个二维的图,a,b相当于两个点,然后做bfs即可 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 struct Node{ 8 int x; 9 int y; 10 int step; 11 }; //记录当前节点的坐标以及到起点的步数 12 13 int map[9][9]; //记录地... 阅读全文

posted @ 2013-10-13 11:02 天依蓝 阅读(185) 评论(0) 推荐(0)

Basic Wall Maze
摘要:poj2935:http://poj.org/problem?id=2935题意:在6*6的格子中,有一些,如果两个格子之间有墙的话,就不能直接相通,问最少要经过几步才能从起点走到终点。并且输出路径。题解:直接bfs 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 struct Node{ 8 int sal; 9 char path[50]; 10 11 }; //用来记录当前节点的到起点的最小值以及取得这个最小值所对应的路径 12 int sx ,sy... 阅读全文

posted @ 2013-10-13 10:56 天依蓝 阅读(171) 评论(0) 推荐(0)

Labeling Balls
摘要:poj3687:http://poj.org/problem?id=3687题意:有N个重量1到N的点,把这N个点涂色,要求在一定的约束下颜色a必须比颜色b要轻,如果有多种选择则让重量最小的对应编号1,然后剩下中重量最小的给编号2,一次类推题解:逆向建图,这样取出来的就是最后选择的点,并标上最大重量,把邻接点入度为0的加入到优先队列中,然后取编号最大的,为的是使得留着编号最小的给重量最大的 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 const int maxn = 202; 7 int ed... 阅读全文

posted @ 2013-10-12 14:45 天依蓝 阅读(207) 评论(0) 推荐(0)

Following Orders
摘要:uva124:http://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=60题意: 第一行给出字符串(小写字母),表示出现的字符类型第二行是约束关系,a1 b1 a2 b2 a3 b3.....ai bi,表示ai必须在bi前面按照字典序输出所有满足约束条件的序列题解:题解:由题意会想到用拓扑排序,但是题目要求是字典序输出,所以可以用dfs来处理。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #inclu 阅读全文

posted @ 2013-10-11 18:04 天依蓝 阅读(289) 评论(0) 推荐(0)

Frame Stacking
摘要:poj1128:http://poj.org/problem?id=1128题意:一个二维图里面有几个相框(四条边的空心矩形框)。有重叠,求重叠顺序。还有题目保证至少存在一种符合要求的序列,当有多种情况时按字典序由小到大输出所有的情况。题解:建图然后+topsort+dfs ,建图很麻烦的,要细心处理。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include //stl迭代器 7 using namespace std; 8 char map[32][32];//记录原图 9 int g[27][... 阅读全文

posted @ 2013-10-10 18:43 天依蓝 阅读(178) 评论(0) 推荐(0)

Window Pains
摘要:poj2585:http://poj.org/problem?id=2585题解:如果i窗口挡在j窗口的前面,则在i,j之间建一条有向边,这样建图,建成有向图,然后就是判断是否有环,如果有环,就是否,否则就是yes。用一遍拓扑排序即可。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int map[5][5];//存储原来的图 7 int g[10][10];//储存窗口之间的边图 8 int counts[10];//记录每个点的入度 9 char str[30];10 //build是以... 阅读全文

posted @ 2013-10-10 08:48 天依蓝 阅读(225) 评论(0) 推荐(0)

Sort it all out
摘要:poj1094:http://poj.org/problem?id=1094题解(一位大神的分析)一、当输入的字母全部都在前n个大写字母范围内时:(1)最终的图 可以排序: 在输入结束前如果能得到最终的图(就是用这n个字母作为顶点,一个都不能少);而且最终得到的图 无环; 只有唯一一个 无前驱(即入度为0)的结点,但允许其子图有多个无前驱的结点。在这步输出排序后,不再对后续输入进行操作(2)输出矛盾:在输入结束前如果最终图的子图有环, 在这步输出矛盾后,不再对后续输入进行操作(3)输出无法确认排序:这种情况必须全部关系输入后才能确定,其中又有2种可能 ①最终图的字母一个不缺,但是有多个 无前驱 阅读全文

posted @ 2013-10-09 09:36 天依蓝 阅读(223) 评论(0) 推荐(0)

Ferry Loading||
摘要:uva10440:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1381题意:题意:一条船能够一次最多渡n辆车过河,过河用t min,回来又要用t min。m辆车按照一定的计划到达岸边。现在要求最少用多少时间就所有的船渡过河,以及用了最少多少次将所有。题解:用贪心思想,最早运到对岸的时间,取决于最后来的一辆车的被运送时间,因此最优解就是最后一辆车能够最早被运送。 1 #include 2 #inc 阅读全文

posted @ 2013-10-08 09:54 天依蓝 阅读(244) 评论(0) 推荐(0)

今年暑假不AC
摘要:hdu2037(今年暑假不AC):http://acm.hdu.edu.cn/showproblem.php?pid=2037题意:暑期到了,同学们不再想做题了,想放松一下看电视,但是重要的是不管看什么节目,我们只想看尽可能多的节目。给出一个n,表示节目的个数。然后n对数,表示每个节目的开始和结束时间。题解:简单的贪心。(个人还认为可以用匹配来做)我们尽可能选择先结束的节目。利用贪心,每次都选择最优的也即是结束时间尽可能早的。当然,有一个条件就是要选的节目起始时间一定大于等于前一个节目的结束时间。首先我们对节目按照结束时间的由小到大排序这样就可以只在一个for循环内将其解决了。 1 #incl 阅读全文

posted @ 2013-10-07 21:43 天依蓝 阅读(254) 评论(0) 推荐(0)

Choose the best route
摘要:hdu 2680:http://acm.hdu.edu.cn/showproblem.php?pid=2680这道题值得一提的两点:在图论中注意重边问题是必须的,有向无向也是同等重要的,如这道题 from station p to station q说的就很清楚是有向图此题如果暴力求解把每个临近的车站都作为源点走一遍,就会超时。此时的做法是在与临近的车站加上一个0,并使其的距离为零,这样就可以转化成单源点的问题#include#include#include#includeusing namespace std;const int maxint=1008;int dist[maxint];in 阅读全文

posted @ 2013-10-03 10:15 天依蓝 阅读(143) 评论(0) 推荐(0)

Asterix and Obelix
摘要:uva10246:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1187题意:地图上有n个城市和某些城市间直达的道路,每条道路都有过路费,在每个城市举办宴会的花费也是已知的,现在给出A和B的位置,瘦陀陀在城市A,胖陀 陀在另一个未知的城市,两人要到城市X举办宴会,要求举办宴会的城市必须是瘦陀陀回家路线中举办宴会最贵的一个城市。求胖陀佗与瘦陀陀回到B的最小花费。 程序会接受多次询问,每次询问都应该立 阅读全文

posted @ 2013-10-03 10:13 天依蓝 阅读(445) 评论(0) 推荐(0)

Cow Contest
摘要:poj3660: http://poj.org/problem?id=3660 题意:一些奶牛之间进行编程比赛,每头牛都有一个编程能力。如果a的能力比b的能力高,则a总能打败b 。现在给你一些牛之间的比赛,以及相应的赢家。让你求出已经确定名牛的个数。题解:只要求出这头牛与其他n-1头之间的关系就行了。如果关系确定,则说明该牛确定。自然想到弗洛伊德求传递闭包。然后求出不能确定的牛的数量,然后总牛数减去即可。#include #include#include#includeusing namespace std;int map[102][102];int n,m,u,v,counts;const 阅读全文

posted @ 2013-10-03 10:05 天依蓝 阅读(152) 评论(0) 推荐(0)

导航