图论
文章平均质量分 59
小白菜又菜
这个作者很懒,什么都没留下…
展开
-
UVa 11635 - Hotel booking
题目:求从起点到终点住过的hotel最少次数。分析:最短路、优先队列。利用spfa和优先队列求解。如果不用优先队列,则有n*h*t种状态,定会TLE,因此利用优先队列并利用优先队列的性质加以优化。优先队列元素的权值为二元组分别代表住过的Hotel数和从Hotel或起点出发后走到当前节点所有的时间。其中hotel的优先级高,所以程序是按照hotel递增的顺序运行的,和bfs时扫描的节点是相邻层的原创 2012-11-14 14:27:20 · 1184 阅读 · 0 评论 -
UVa 10507 - Waking up brain
题目:激活大脑,大脑分成很多个相邻的区域,如果某一区域与三个激活的区域相连时间达到一年,那么这块区域也会被激活。现在给你三块激活的区域,判断是否能够激活整个大脑,如果可以请输出激活需要的时间。分析:搜索,最短路。激活需要的时间就是使每块被激活的时间最短,这些最小值中的最大值。虽然,初始有三个点,可以设一个原始点,进行单元最短路径算法即可;而且,由于节点间的路径长度相同,利用bfs即可。这里利用原创 2013-10-14 03:10:10 · 2071 阅读 · 0 评论 -
UVa 10075 - Airlines
题目:给出地球上一些点的经度和纬度,以及地点之间是否直达的航班,然后询问两地间最短的行程。分析:计算几何、最短路、字符串、hash。 首先,利用hash建立地名(单词)和编号的映射; 然后,将大地坐标转换,求出有直达航班地点之间的球面最短距离; d = r*sqrt(2-2*(cos(lat1)*cos(lat2)*原创 2013-10-14 06:38:02 · 18429 阅读 · 0 评论 -
poj 3521 Geometric Map
题目:给你平面上的n条线段,这些线段分成两类: 1.街道边,两个端点都与其他线段相连,是可以行走的路径; 2.标记边,只有一个端点和其他线段相连,标记路径的方向(角度大于90方向的可以通行)。 计算起点到终点的最短距离。输出路径上的点,用0结束;如果不存在输出-1。分析:计算几何、最短路。预处理有点麻烦的题目。由于分原创 2013-10-18 23:16:45 · 1041 阅读 · 0 评论 -
UVa 439 - Knight Moves
题目:给出国际象棋棋盘中的两个点,求马从一个点跳到另一个点的最少步数。分析:简单题、搜索、最短路。利用bfs去接即可。#include #include #include #include using namespace std;typedef struct qnode { int x,y,d; qnode( int a, int b, int c ){原创 2013-10-26 05:31:02 · 2742 阅读 · 0 评论 -
UVa 10067 - Playing with Wheels
题目:有四个环上面有顺时针的0-9,每个环可以顺时针或者逆时针转动,某些状态不能选择,求初始状态到目标状态的最小步数。分析:搜索。设计状态,删除状态表,罗搜即可。注意:memset在string.h中。#include #include #include using namespace std;int S[4],T[4],F[4],A[4],B[4];int U[1000原创 2014-03-16 02:43:53 · 1266 阅读 · 0 评论 -
UVa 929 - Number Maze
题目:给定平面N*M的网格,每个里面有一个0-9的某个数字。求左上到右下的路径和最小,每次走相邻格。分析:最短路。dijkstra+优先队列险过。尝试了各种算法,bellman-ford算法TLE,spfa+stack算法TLE。注意:很卡常系数,o(╯□╰)o;采取一维状态记录TLE,利用二维状态记录可提高效率。#include #include #include #inclu原创 2014-03-16 20:42:21 · 1990 阅读 · 0 评论 -
UVa 532 - Dungeon Master
题目:三维的地图中找到S到E得最短路。分析:搜索,最短路。bfs即可。注意:连续的if(无else)嵌套会CE。#include #include #include #include using namespace std;char Maps[32][32][32];int used[32][32][32];int d[6][3] = {0,0,1,0,0,-1,原创 2014-03-17 11:45:05 · 913 阅读 · 0 评论 -
UVa 924 - Spreading The News
题目:消息在人群中中的传播,给定一个传递关系,每个消息传播需要一天。 给出不同的消息出发点,问同时最多有多少人在传播消息,那最早是第几天。分析:最短路,搜索。利用bfs算法计算出每个人接收消息的时间,利用时间计数,统计查询。注意:有向图,边不是双向的;memset在string.h文件中。#include #include #include #inclu原创 2014-03-17 18:05:59 · 755 阅读 · 0 评论 -
UVa 10000 - Longest Paths
题目:给出一个图和图上的边(边长为1),求最长路径,图中无回路。分析:最短路、图论。方案1,拓扑排序求关键路径; 方案2:边长取-1则变成无负权回路状态下的最短路问题。利用spfa(bellman-ford)求最短路。#include #include #include #include using namespace std;int maps[10原创 2014-03-18 00:30:30 · 2287 阅读 · 0 评论 -
UVa 558 - Wormholes
题目:给你空间中的一些虫洞,可以在时间点跳跃,问是否存在负权回路。分析:最短路。判断图中是否有福泉回路,利用bellman-ford或者spfa,如果更新次数超过点的上限,既有。注意:有向图。#include #include #include #include using namespace std;int visit[1005];int dist[1005];in原创 2014-03-18 16:38:39 · 617 阅读 · 0 评论 -
UVa 10653 - Bombs! NO they are Mines!!
题目:给你一个R*C的平面图,一个机器人在上面走,上面有一些坑,找到要求的最短路径。分析:搜索,最短路。直接利用bfs求解即可。#include #include #include #include #include using namespace std;int maps[1005][1005];int smap[1005][1005];int d[4][2] = {原创 2014-03-18 22:51:52 · 1019 阅读 · 0 评论 -
UVa 11101 - Mall Mania
题目:给你平面上的两个图形的有序点集表示,求两图形的哈密顿距离(|x|+|y|)。分析:搜索、最短路。利用bfs求解即可,可利用缩小边界优化效率,dbfs或者A*可能效率更高。注意:数据范围是0-2000,2001个点,小心RE。#include #include #include #include #include using namespace std;typede原创 2014-03-19 12:32:01 · 1173 阅读 · 0 评论 -
UVa 11624 - Fire!
题目:一个平面迷宫中有一个人,迷宫中有些点起火了,火和人每个单位时间只能向相邻的格子移动, 其中有一些空间被墙壁占据,问这个人在不背或烧到的情况下,离开迷宫的最快时间。分析:搜索。迷宫中的最短路,首先就会想到bfs;并且bfs利用队列会使状态空间按时间顺序分层。 而火的扩散过程正好符合这个时间的层次。所以我们会想到,利用两个队列,一个储存人的原创 2014-03-19 14:58:55 · 4594 阅读 · 3 评论 -
UVa 10009 - All Roads Lead Where?
题目:给你一些地名,以及他们的相连关系,求两点间的最短路径,输出路径。分析:最短路。根据题意给出的图形应该是一棵树,直接利用bfs求解即可,不需要设置标记数组。 利用hash表,建立地名和地点id的一一映射,利用邻接表建图,最后运行bfs即可。注意:输出格式,每组之间有一个换行。#include #include #include #include原创 2014-03-21 20:30:06 · 1739 阅读 · 0 评论 -
UVa 10099 - The Tourist Guide
题目:有一个导游,要带领团队从当前点,走到目标点,但是每条路一次性通过的人有数量限制, 所以需要分批次进行。问最少需要分多少次进行。分析:贪心,最短路或最小生成树。图上贪心性质的扩散问题,可以作为最短路或者最小生成树求解。 问题的贪心特性成立很容易证明。 设集合A为当前计算的结果,则对于p∈A且q不在A中,如果点q加原创 2014-03-21 18:18:33 · 1451 阅读 · 0 评论 -
UVa 10397 - Connect the Campus
题目:给你一些建筑,以及他们之间的一些电缆,问把他们都连起来还需要多少电缆。分析:最小生成树。将已有的电缆长度定义为0,直接进行最小生成树算法即可。#include #include #include #include #include #include using namespace std;typedef struct p_node{ int x,y;}pnod原创 2014-03-22 01:44:25 · 817 阅读 · 0 评论 -
UVa 11747 - Heavy Cycle Edges
题目:计算最小生成树的kruskal算法,有两种途径,方法一是我们常用的不断的把边加到目标集合上。 方法二是从图中不断的删边,最后剩下的就是所求集合。分析:最小生成树。利用kruskal算法的方法一,求剩下的边就是删掉的边,即为所求。注意:数组别开小了,特别是并查集的。#include #include #include #include #inclu原创 2014-03-22 19:51:11 · 892 阅读 · 0 评论 -
UVa 10600 - ACM Contest and Blackout
题目:计算一个图的最小生成树和次小生成树。分析:图论,最小生成树。冤家题(⊙_⊙),2011年北京赛区现场赛A题类似物。 当时在赛场上想到了kruskal+bfs的加边删边算法。由于写错了一行代码最后悲剧了。 利用kruskal算法先计算出最小生成树,然后设置maxe[i][j]数组, 记录i到j在最小生成树上的路径原创 2014-03-22 15:34:15 · 1876 阅读 · 0 评论 -
UVa 11631 - Dark roads
题目:求一个图中,形成最小生成树后剩下的边长的总和,即利用补图求kruskal求SMT删掉的边的长度和。分析:图论,最小生成树。#include #include #include #include #include #include using namespace std;typedef struct d_node{ int point1; int point2;原创 2014-03-22 20:24:54 · 788 阅读 · 0 评论 -
UVa 10307 - Killing Aliens in Borg Maze
题目:在一个迷宫中,以S为起点,遇到A时可以分叉,问走到所有的A的路径和最小代价。分析:图论,最短路,最小生成树。利用bfs求出所有的A和A以及A和S间的最短路, 再在这个最短路生成的途中计算最小生成树即可。注意:最多101个点,世界上最遥远的距离就是因为数组少开了1个而无限的WA( ⊙ o ⊙ )!#include #include #include原创 2014-03-24 01:38:15 · 1461 阅读 · 0 评论 -
UVa 10034 - Freckles
题目:给你平面上的n个点,求把他们连在一起的最小代价。分析:图论,最小生成树。直接计算出所有点之间的距离,然后计算最小生成树即可。注意:每组数据之间有空行。#include #include #include #include #include using namespace std;typedef struct d_node{ int point1; in原创 2014-03-24 00:43:16 · 587 阅读 · 0 评论 -
UVa 10048 - Audiophobia
题目:在一个城市里,每条道路上都有噪音,你要从A点走到B点,找出一条道路,使最大的噪音最小。分析:最短路、最小生成树。当计算图中某条路径上的线段最大值最小类似的问题。 可以利用最小生成树或最短路算法。更新时取最值即可。说明:由于本题查找较多,需要计算多元最值,所以采用floyd算法。#include #include #define max(a,b)原创 2014-04-27 15:15:04 · 767 阅读 · 0 评论 -
UVa 10047 - The Monocycle
题目:在一个n*m的迷宫中有一个轮子,轮子的每个72°的扇面被涂上一种不同的颜色。 轮子可以移动到上下左右四个方向的格子中,每次移动到相邻格子中,轮子转动72°。 每个单位时间轮子可以做两种运动: 1.移动到相邻格子;2.改变朝向,面向原来的左、右方(朝向改变90°),但不转动。 初始时轮子在'原创 2014-05-15 07:39:11 · 793 阅读 · 0 评论 -
UVa 253 - Cube painting
题目:有两个zhengfan分析:原创 2014-06-27 11:25:49 · 969 阅读 · 0 评论 -
UVa 10610 - Gopher and Hawks
题目:已知地鼠的两个洞和其他原创 2014-07-20 08:10:29 · 903 阅读 · 2 评论 -
UVa 784 - Maze Exploration
题目:给你一个二维的迷宫,从'*'出发把suo原创 2014-06-10 10:49:06 · 601 阅读 · 0 评论 -
UVa 352 - The Seasonal War
题目:在n*n的矩阵中,求有多少个块,原创 2014-06-09 23:01:17 · 1245 阅读 · 0 评论 -
UVa 10336 - Rank the Languages
题目:给你一个地图,上面标记着每个地区语言原创 2014-06-10 09:12:31 · 2010 阅读 · 0 评论 -
UVa 11518 - Dominos 2
题目:给你一些多米诺骨牌,他们的关系,以及推动的那些骨牌编号,问最后倒了多少个。分析:图论,搜索。按照题意,建立有向图,搜索即可。每条边均为单向。 因为点多边少,所以采用邻接表储存。说明:注意初始化。#include #include #include #include using namespace std;int visit[10010];原创 2014-06-10 23:22:19 · 1773 阅读 · 0 评论 -
UVa 657 - The die is cast
题目:给你一个地图,分成很多个区域'*',每个区域中还有一些'X',求每个区域中'X'区域的个数。分析:搜索,bfs+dfs。 首先,利用bfs寻找每个'*'的区域; 然后,在每个区域中,遇到'X'用floodfill处理,将'X'统计,并转化成'*'; 最后,统计输出即可。说明:区域的边界不一定只有'*',也可原创 2014-06-10 21:18:49 · 891 阅读 · 2 评论 -
UVa 908 - Re-connecting Computer Sites
题目:有一些电脑,电脑间由一些原创 2014-06-11 23:31:53 · 1771 阅读 · 0 评论 -
UVa 524 - Prime Ring Problem
题目:把1-n,连续的放到一个环里,使相邻的数字和为素数,输出所有结果。分析:搜索+剪枝。如果裸搜,用dancing-links那种拆装的链表,应该差不多满足16的数据量。 这里利用一个性质进行剪枝:相邻的数字一定是奇偶性不同的数字。 (如果上述假设不成立,则存在相邻的奇数或偶数,那么他们的和一定是大于2的偶数,不是素数)原创 2014-07-03 08:50:27 · 2763 阅读 · 2 评论 -
UVa 11294 - Wedding
题目:有一场婚礼,有n对夫妇参加,他们之间有些人之间有奸情(可能同性),在场的人中有一个公主, 她清楚其他人的人际关系,问能否安排座位使得两边都是n个人,且公主看不见有奸情的人同时在的对面。分析:2-SAT。直接按照看的流程敲的程序。 1.建图,矛盾的点建立对应的边(与一直关系相反); 2.利用Tarjan算法计算原创 2014-07-06 14:00:21 · 1250 阅读 · 0 评论 -
UVa 729 - The Hamming Distance Problem
题目:构造n位01串,其中有m个1的所有组合。分析:搜索、枚举。可以利用库函数,求解,也可以利用dfs求解;我这里采用位运算计算组合数。说明:注意库啊!#include #include #include using namespace std;int S[20];int main(){ int T,N,M; while ( cin >> T ) for ( i原创 2014-07-08 08:26:59 · 1207 阅读 · 0 评论 -
UVa 167 - The Sultan's Successors
题目:分析:说明:原创 2014-08-01 19:24:20 · 678 阅读 · 0 评论 -
UVa 131 - The Psychic Poker Player
题目:手里有五张牌,桌上有一堆牌(五张),你可以弃掉手中的k(0 比较规则如下:(按优先级排序) 1.straight-flush:同花顺,牌面为T(10) - A,这里不论花色是否相同; 2.four-of-a-kind:四条,牌面有4个相同的值; 3.full-house:船牌,牌面有3个相原创 2014-07-10 23:02:50 · 1652 阅读 · 2 评论 -
UVa 988 - Many Paths, One Destination
题目:人生有很多选择,现在给你一些选择(0~n-1),和每个选择分支后面的其他选择序号,求选择总数。分析:dp,图论。如果某状态的后续选择个数是0个则,代表死亡,统计所有到达死亡的路径条数即可。 用一个状态数组记录到达每个选择的路径数,它等于能到达它的前驱节点的路径加和。 稀疏图,使用邻接表储存。初始是节点0的路径条数为1,代表出生。说明原创 2014-08-04 15:55:44 · 944 阅读 · 0 评论 -
UVa 406 - Prime Cuts
题目:给你2个数n,C,确定,不超过n的素数的中间的原创 2014-06-23 02:36:33 · 2696 阅读 · 0 评论 -
UVa 567 - Risk
题目:分析:说明:原创 2014-08-01 10:34:37 · 703 阅读 · 0 评论