题目1162:I Wanna Go Home
2017-04-20 09:10
260 查看
#include "iostream" #include "stdio.h" #include <vector> #include <cstring> #include <algorithm> #include <string> #include <string.h> #include <stack> #include <queue> #include <ctype.h> #include <functional> #include <math.h> using namespace std; //1162 const int INF=0x7fffffff; struct E{ int nt,d; }; vector<E> v[610]; bool mk[610]; int ds[610]; int flag[610]; E tmp; int n,m,a,b,c,np; int main(){ //freopen("input.txt","r",stdin); while(cin>>n>>m && n!=0){ for(int i=1;i<=n;i++){ v[i].clear(); mk[i]=false; ds[i]=-1; } while(m--){ cin>>a>>b>>c; tmp.d=c; tmp.nt=b; v[a].push_back(tmp); tmp.nt=a; v[b].push_back(tmp); } for(int i=1;i<=n;i++){ cin>>flag[i]; } ds[1]=0; mk[1]=true; np=1; for(int i=0;i<n;i++){ //dijkstra 循环n-1次 for(int j=0;j<v[np].size();j++){ int t=v[np][j].nt; int c=v[np][j].d; if(mk[t]) continue; if(flag[np]==2 && flag[t]==1) continue; //不从阵营2到阵营1 if(ds[t]==-1 || ds[np]+c<ds[t] ) ds[t]=ds[np]+c; } int mi=INF; for(int j=1;j<=n;j++){ if(mk[j]||ds[j]==-1) continue; if(ds[j]<mi){ mi=ds[j]; np=j; } } mk[np]=true; } cout<<ds[2]<<endl; } return 0; } /************************************************************** Problem: 1162 User: cust123 Language: C++ Result: Accepted Time:20 ms Memory:1672 kb ****************************************************************/
相关文章推荐
- 题目1162:I Wanna Go Home
- 题目1162:I Wanna Go Home:标准单源最短路
- 九度OJ 题目1162:I Wanna Go Home
- Jobdu 题目1162:I Wanna Go Home
- 九度 oj 题目1162:I Wanna Go Home
- 九度 题目1162:I Wanna Go Home
- 题目1162:I Wanna Go Home
- 题目1162:I Wanna Go Home
- 题目1162:I Wanna Go Home(最短路径问题进阶dijkstra算法))
- 最短路径--九度1162.I Wanna Go Home
- 九度OJ 1162 I Wanna Go Home
- 九度:1162<I wanna go home><最短路径>
- 九度OJ-1162:I Wanna Go Home
- 九度 OJ 1162 I Wanna Go Home
- 九度OJ 1162:I Wanna Go Home(我想回家) (最短路径)
- 九度 OJ 1162 I Wanna Go Home 最短路问题
- 九度OJ 1162:I Wanna Go Home(我想回家) (最短路径)
- POJ 3767 I Wanna Go Home 笔记 最短路径
- POJ3767----I Wanna Go Home
- poj 3767 I Wanna Go Home