九度OJ 1008
来源:互联网 发布:群硕软件 编辑:程序博客网 时间:2024/06/05 12:06
#include <iostream>#include <cstdio>#include <vector>#include <algorithm>#include <bitset>#include <map>#include <queue>using namespace std;vector<vector<int> > len(1001, vector<int>(1001));vector<vector<int> > cost(1001, vector<int>(1001));vector<int> distD(1001);vector<int> distP(1001);map<int, vector<int> > vertex;bitset<1001> visit;queue<int> q;void findPath(int n, int start){ visit.reset(); vector<int>::iterator iter = vertex[start].begin(); for(; iter != vertex[start].end(); ++iter) { distD[*iter] = len[start][*iter]; distP[*iter] = cost[start][*iter]; visit.set(*iter); q.push(*iter); } visit.set(start); distD[start] = 0; while(!q.empty()) { int min = 100000000; int i = q.front(); q.pop(); vector<int>::iterator it = vertex[i].begin(); for(; it != vertex[i].end(); ++it) { min = 100000000; if(!visit[*it]) { for(vector<int>::iterator iter2 = vertex[*it].begin(); iter2 != vertex[*it].end(); ++iter2) { if(visit[*iter2] && distD[*iter2] + len[*it][*iter2] < min) { min = distD[*iter2] + len[*it][*iter2]; distD[*it] = min; distP[*it] = distP[*iter2] + cost[*it][*iter2]; } else if(visit[*iter2] && distD[*iter2] + len[*it][*iter2] == min) { if(distP[*it] > distP[*iter2] + cost[*it][*iter2]) distP[*it] = distP[*iter2] + cost[*it][*iter2]; } } visit.set(*it); q.push(*it); } } }}int main(){ //freopen("1.txt", "r", stdin); int n, m; while(cin >> n >> m, m * n != 0) { len.clear(); cost.clear(); distD.clear(); distP.clear(); vertex.clear(); len.resize(1001); cost.resize(1001); distD.resize(1001); distP.resize(1001); for(int i = 0; i < 1001; ++i) { len[i].resize(1001); cost[i].resize(1001); } for(int i = 0; i < 1001; ++i) for(int j = 0; j < 1001; ++j) { len[i][j] = 0; cost[i][j] = 0; } for(int i = 0; i < m; ++i) { int a, b, d, p; cin >> a >> b >> d >> p; vertex[a].push_back(b); vertex[b].push_back(a); len[a][b] = len[b][a] = d; cost[a][b] = cost[b][a] = p; } int start, end; cin >> start >> end; findPath(n, start); cout << distD[end] << " " << distP[end] << endl; }}
0 0
- 九度OJ 1008
- 九度oj 1008
- 【九度OJ】:九度OJ 1050
- 【九度OJ】:九度OJ 1053
- 【九度OJ】:九度OJ 1056
- 【九度OJ】:九度OJ 1059
- 【九度OJ】:九度OJ 1206
- 九度oj 1008 最短路径
- 九度OJ:1000
- 【九度OJ】 1006
- 九度 OJ 1499
- 九度OJ-1002
- 九度OJ-1003
- 九度OJ 1004
- 九度OJ 1003
- 九度oj 采药
- 九度OJ 1001
- 九度OJ 1015
- Telnet(it work)
- 面向对象技术——UML基础
- C语言面试题库1-2
- oracle登录错误(ORA-01033:ORACLE initialization or shutdown in progress)
- [ZedBoard移植嵌入式Linux教程(7)]制作boot.bin
- 九度OJ 1008
- 2013 国家自然科学基金中标项目软件工程
- Android adb opendir failed ,permission denied
- 数据结构——二叉树
- 九度OJ 1009
- stm32多功能双向5v兼容的IO口的理解
- 记录使用ubuntu的一些经历
- 专利技术交底书撰写经历
- mobi格式文件解压实践