题目描述

总结

1. 用 BFS 实现 Dijkstra. 要点是, visited 后标记, 把某个点从优先队列取出后再标记

代码 未通过九度测试 RE

/** source.cpp**  Created on: 2014-4-4*      Author: vincent*/#include <iostream>
#include <stdio.h>
#include <queue>
#include <vector>
#include <memory.h>
using namespace std;class GraphNode {
public:int index;int dis;GraphNode(int _index, int _dis):index(_index), dis(_dis) {}GraphNode() {GraphNode(0, 0);}
};class QueueNode {
public:int index;int dis;QueueNode(int _index, int _dis):index(_index), dis(_dis) {}QueueNode() {QueueNode(0, 0);}bool operator <(const QueueNode &other) const {return this->dis > other.dis;}
};
const int INF = 0X3F3F3F3F;
vector<GraphNode> graph[10100];
bool visited[10100];int main() {int vertex, edge;freopen("input.txt", "r", stdin);while(scanf("%d%d", &vertex, &edge) != EOF) {for(int i = 0; i <= vertex; i++)graph[i].clear();memset(visited, 0, sizeof(visited));int m, n, k;for(int i = 0; i < edge; i ++) {scanf("%d%d%d", &m, &n, &k);graph[m].push_back(GraphNode(n, k));graph[n].push_back(GraphNode(m, k));}priority_queue<QueueNode> record;record.push(QueueNode(1, 0));visited[1] = true;int minK = INF;while(!record.empty()) {QueueNode qNode = record.top();record.pop();if(qNode.index == vertex) {minK = qNode.dis;visited[qNode.index] = 1;break;}int index = qNode.index;for(size_t i = 0; i < graph[index].size(); i ++) {int j = graph[index][i].index;if(visited[j])continue;record.push(QueueNode(j, max(qNode.dis, graph[index][i].dis)));}}if(visited[vertex] == 0) {printf("-1\n");}else {printf("%d\n", minK);}}return 0;
}

  

SPFA Solution WA

#include <iostream>
#include <stdio.h>
#include <memory.h>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <deque>
#include <cstring>
#define MIN(x,y) (x)<(y)?(x):(y)
using namespace std;class Node  {
public:int index;int cost;Node()  {index = cost = -1;}Node(int _index, int _cost):index(_index), cost(_cost) {}
};vector<Node> graph[10010];
int dist[10010];int spfa(int m)  {deque<int> record;memset(dist, 0x3f, sizeof(dist));set<int> visited;record.push_back(1);visited.insert(1);dist[1] = 0;while(!record.empty())  {int fat = record.front();record.pop_front();for(int i = 0; i < graph[fat].size(); i ++)  {Node child = graph[fat][i];int child_index = child.index;int child_cost = child.cost;if(max(dist[fat],child_cost) < dist[child_index]) {dist[child_index] = max(dist[fat], child_cost);if(visited.count(child_index)) continue;record.push_back(child_index);visited.insert(child_index);}}}if(dist[m] == 0x3f3f3f3f)return -1;return dist[m];}int main() {freopen("C:\\Users\\vincent\\Dropbox\\workplacce\\joj\\test.txt", "r", stdin);int m, n;while(scanf("%d%d", &m, &n) != EOF)  {for(int i = 1; i <= m; i ++)  {graph[i].clear();}int from, to, cost;for(int i = 0; i < n; i ++)  {scanf("%d%d%d", &from, &to, &cost);graph[from].push_back(Node(to, cost));graph[to].push_back(Node(from, cost));}int res = spfa(m);printf("%d\n", res);}return 0;
}

  

转载于:https://www.cnblogs.com/zhouzhuo/p/3645826.html

九度 1545:奇怪的连通图相关推荐

  1. 九度 1408 寻找表达式 (中缀转后缀)

    题目描述 总结 1. '_' 运算符不是 a*10 + b, 而是 a*(10 or 100) + b 2. char * 与 string 的相互转化 char* = string.c_str() ...

  2. 剑指Offer - 九度1511 - 从尾到头打印链表

    剑指Offer - 九度1511 - 从尾到头打印链表2013-11-29 21:08 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案 ...

  3. 九度题库(所有题目整理,适合计算机考研和面试的人用)

    本来搜一道面试题,找到叫九度题库的地方,发现里面的题目都比较基础,很适合当面试题来练习. 于是,闲得蛋疼,把所有题目给爬下来了,并整理成markdown格式,然后export成pdf,方便大家离线阅读 ...

  4. 九度 1462:两船载物问题(01背包)

    题目描述: 给定n个物品的重量和两艘载重量分别为c1和c2的船,问能否用这两艘船装下所有的物品. 思路 1. 朴素背包问题 2. 有几个细节要好好把握 (1) 在读入物品重量时顺带统计物品的最大值和总 ...

  5. 【强烈推荐】程序猿们,九度Online Judge开始举办月赛啦!!会编程才是王道!!!!!

    程序猿们,九度Online Judge开始举办月赛啦!!会编程才是王道!! 在国内计算机考研中,已经有越来越多的高校采用ACM上机考试的形式,在复试中来考察考生的实际动手编程能力,并且机试在复试中所占 ...

  6. 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列

    剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...

  7. 九度OJ1486 /POJ 1029/2012北京大学研究生复试上机

    wa到死!wa到死!这是一个看着简单,坑及其多的题! 坑一:POJ上是单组输入,九度上是多组输入,妈蛋要是研究生复试遇到这种大坑肯定死掉啊!而且对于codeforces比较习惯的 同学肯定会觉得巨坑无 ...

  8. 九度 1209:最小邮票数(多重背包)

    题目描述: 有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值     如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分.3分.4分即可 思路 1. 朴素背包问 ...

  9. 打不开磁盘配额linux,九度OJ 1455 珍惜现在,感恩生活 -- 动态规划(背包问题)...

    题目描述: 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买.请问:你用有限的资金最 ...

最新文章

  1. 从神经元谈到深度神经网络
  2. Jmeter之Bean shell使用(一)
  3. 函数返回引用什么意思_【20200917】编程入门第七课,函数(function)
  4. etcd集群搭建(高可用)
  5. NYOJ 875 小M的操作数
  6. via logo html,HTML5 Audio Description (via screenreader)
  7. 微软面向初学者的机器学习课程:1.4-机器学习技术
  8. linux查找应用主机,Linux 主机和服务器基本性能检查命令和工具
  9. SQL Server 2005 DTS导入平面数据
  10. IOS中NSUserDefaults的用法(轻量级本地数据存储)
  11. thinkphp3.2.3 bug集锦
  12. topcoder srm 699 div1 -3
  13. 狮子鱼社区团购独立版安装方法
  14. 一篇文章带你大致了解5G关键技术、协议架构、网络优化覆盖、业务测试与验证
  15. 论MongoDB索引选择的重要性
  16. linkedin python 领英技能 测评
  17. fedora20 安装nvidia独立显卡驱动
  18. 爬取免费代理,拥有自己的代理池
  19. windows找不到文件gpedit.msc怎么办?
  20. Axapta program, involve MenuItem:程序定义MenuItem

热门文章

  1. easyui radio 取值和赋值
  2. HTML5 本地存储
  3. OC-NSString从文件中读取字符串
  4. 【C】关于main()函数参数的问题;
  5. 从“小而精”到“大而广”,知乎怎样一步步迈向全民皆知?
  6. 小程序上线7天,罗胖带着1000万用户跑了……
  7. 聊天机器人突然火了,能解决那方面的需求吗?
  8. 分享经济:我的,就是你的
  9. 户外私密Party | 在大峡谷里聊一点平时不能聊的干货(报名ing...)
  10. SD卡格式化怎么恢复?只需要五个步骤