【POJ】2387 Til the Cows Come Home

题目链接:http://poj.org/problem?id=2387

题意:求从1到n的最短路

题解:板子题。spfa。

代码:

 1 #include<iostream>
 2 #include<stack>
 3 #include<vector>
 4 #include<queue>
 5 #include<algorithm>
 6 using namespace std;
 7 const int maxn = 2e5+7;
 8 
 9 vector< pair<int,int> > e[maxn];
10 
11 int n,m;
12 int d[maxn],inq[maxn];
13 
14 void init(){
15     for(int i = 0; i < maxn; i++)
16         e[i].clear();
17     for(int i = 0 ;i < maxn ; i++)
18         inq[i] = 0;
19     for(int i = 0 ; i < maxn ; i++)
20         d[i] = 1e9;
21 }
22 
23 int main(int argc, const char * argv[]) {
24     while(cin>>m>>n){
25         init();
26         int x,y,z;
27         for(int i = 0; i < m ;i++){
28             cin>>x>>y>>z;
29             e[x].push_back(make_pair(y,z));
30             e[y].push_back(make_pair(x,z));
31         }
32         int s,t;
33         //cin>>s>>t;
34         s = 1;
35         t = n;
36         queue<int>Q;
37         Q.push(s);d[s] = 0 ;inq[s] = 1;
38         while( !Q.empty() ){
39             int now = Q.front();
40             Q.pop();
41             inq[now] = 0;
42             for(int i = 0; i < e[now].size() ; i++){
43                 int v = e[now][i].first;
44                 if(d[v] > d[now] + e[now][i].second){
45                     d[v] = d[now] + e[now][i].second;
46                     if(inq[v] == 1)
47                         continue;
48                     inq[v] = 1;
49                     Q.push(v);
50                 }
51             }
52 
53         }
54         if(d[t] == 1e9)
55             cout<<-1<<endl;
56         else
57             cout<<d[t]<<endl;
58     }
59     return 0;
60 }

看题没看仔细。。。一直n和m输入反了,还以为是去重的问题。搞了好久。。然后发现其实pair这样存储的模式不用考虑去重的问题。也算是有所收获吧。哎。心痛。。

猜你喜欢

转载自www.cnblogs.com/Asumi/p/9699058.html
今日推荐