online_judge_1162
来源:互联网 发布:windows xp手机主题 编辑:程序博客网 时间:2024/06/08 08:18
#include <iostream>#include <vector>#include <cstring>using namespace std;struct E{ int next; int cost;};vector<E> edge[601];int a[10001],b[10001],cost[10001],c[10001];bool mark[601];int main(){ int n,m; int i,j; int Dis[601]; while(cin>>n && n!=0) { cin>>m; for(i=1; i<=n; i++) { edge[i].clear(); } for(i=0; i<m; i++) { cin>>a[i]>>b[i]>>cost[i]; } for(i=1; i<=n; i++) { cin>>c[i]; } for(i=0; i<m; i++) { if(c[a[i]] == c[b[i]]) { E tmp; tmp.next = b[i]; tmp.cost = cost[i]; edge[a[i]].push_back(tmp); tmp.next = a[i]; edge[b[i]].push_back(tmp); } else if(c[a[i]] == 1) { E tmp; tmp.next = b[i]; tmp.cost = cost[i]; edge[a[i]].push_back(tmp); } else { E tmp; tmp.cost = cost[i]; tmp.next = a[i]; edge[b[i]].push_back(tmp); } } for(i=1; i<=n; ++i) { Dis[i] = -1; mark[i] = false; } int newP = 1; int tc,tn; mark[newP] = true; Dis[newP] = 0; for(i=1; i<n; ++i) { for(j=0; j<edge[newP].size(); ++j) { tn = edge[newP][j].next; tc = edge[newP][j].cost; if(mark[tn]) continue; if(Dis[tn]==-1 || Dis[tn]>Dis[newP]+tc) Dis[tn] = Dis[newP]+tc; } int tmin = 0x7fffffff; for(j=1; j<=n; ++j) { if(mark[j] || Dis[j]==-1) continue; if(Dis[j]<tmin) { tmin = Dis[j]; newP = j; } } mark[newP] = true; } cout<<Dis[2]<<endl; } return 0;}
惭愧啊!Dijkstra写起来都很陌生……
0 0
- online_judge_1162
- 六款值得推荐的android(安卓)开源框架简介
- JavaMail介绍
- 【jvm】java垃圾回收
- oracle笔记整理8——生产批量操作语句、oracle系统包、创建用户并授权、变量属性
- iOS程序性能优化
- online_judge_1162
- [Android Studio]For MAC快捷键及功能记录(持续更新)
- LeetCode Generate Parentheses
- Makefile的一种通用写法
- <php+mysql>failed to open stream: Permission denied问题解决办法
- hdoj1969Pie【二分】
- ES6学习——新的语法:数值字面量扩展(Number Literal Extensions)
- Matlab求方差,均值,均方差,协方差的函数
- Objective-C语言——Extension延展