摘要: 该题题义是某个人从S点出发,去寻找所有的A,他可以直接到达每个A,也可以通过分身来到达,具体视那种方法所走的路程短而定。换句话说就是可以从A点再走到A点来寻找下一个A,而不选择再从S出发。首先将任意两点之间(A或者S)的距离求出来(通过BFS)然后再建立最小生成树即可。注意输入数据中x,y后面不只一个空格。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#include <cmath>#include <algorithm>#include <queue> 阅读全文
posted @ 2012-07-01 21:50 沐阳 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 最直接的最小生成树,不解释了。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#include <algorithm>using namespace std;int N, pos, set[105];struct Node{ int x, y, dist; bool operator < (Node t) const { return dist < t.dist; }}e[10005];int find(int x){ return set[x] = x == set 阅读全文
posted @ 2012-07-01 17:52 沐阳 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 一道简单的最小生成数,求使得所有的路连通的最小总路程代价中的最长的子路的长度。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#include <algorithm>using namespace std;int N, pos, set[505];struct Node{ int x, y, dist; bool operator < (Node t) const { return dist < t.dist; }}e[250005];int find(int x){ 阅读全文
posted @ 2012-07-01 17:47 沐阳 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 计算整个汽车演化过程中所要改变的最少的字符数。改变的字符数的计算方式为1-7位不同位的个数。代码如下:#include <cstdlib>#include <cstring>#include <algorithm>#include <cstdio>using namespace std;int N, pos, set[2005];char s[2005][10];struct Node{ int x, y, diff; bool operator < (Node t) const { return diff < t.diff; }}e 阅读全文
posted @ 2012-07-01 17:37 沐阳 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 跟POJ-1860基本一样,bellman求是否存在环。这里吸取了别人的代码,让bellman算法的外循环直接增加一次,再判定是否在这个过程中有无更新推出的情况。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#include <map>#include <string>using namespace std;int N, pos, cnt;double dis[35];map<string,int>mp;struct Node{ int x, y; do 阅读全文
posted @ 2012-07-01 15:28 沐阳 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 计算出是否存在某个源点发出的信息能够到达所有其他点,并且输出满足该情况下的整个路径中最长路径最小的那个源点以及那条最长的边。floyd直接计算,在通过遍历整个二维数组来确定这个最后结果。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>#define INF 0x3f3f3f3f#define MAXN 105using namespace std;// 自己到自己的距离要赋值成零int N, G[MAXN][MAXN];void floyd 阅读全文
posted @ 2012-07-01 12:06 沐阳 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 该题就是求一只青蛙从1号石头跳到2号石头的所有路径中跳跃距离最大值的最小值。仔细想想的话,将原来dijkstra的dis数组赋值为这个minmax含义,同样满足贪心规则,所以就是普通的dijkstra。代码如下:#include <cstring>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cmath>#define MAXN 205using namespace std;int N;struct Node{ int x, y;}e[MAXN];do 阅读全文
posted @ 2012-07-01 09:57 沐阳 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 该题是做最短路专题时的题,但是可惜没有想到如何进行最短路求解。倒是觉得dfs能够得到结果,因为该题对于建立边有严格的条件,递归能够很好的解决这个约束。每次递归时将当前路径的最低等级和最高等级传递下去,然后再进行判断。这里还要注意判定环的存在。后者没有注意的话会MLE。代码如下:#include <cstring>#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#define MAXN 105using namespace std;int M, 阅读全文
posted @ 2012-07-01 00:30 沐阳 阅读(263) 评论(0) 推荐(0) 编辑