电车(洛谷1346)——简单建模最短路

  题目大意,每个点到它所连接的第一个点的距离为0,后面的为1,求起点到终点最短路。我也不知道为什么这么一个水题我要写篇博文。

 1 #include<queue>
 2 #include<vector>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<cstring>
 6 #include<cstdlib>
 7 #include<cstdio>
 8 using namespace std;
 9 const int N=111,iNF=0x3f3f3f3f;
10 int n,sx,tx,d[N];
11 bool inq[N];
12 vector<int> gr[N],dis[N];
13 queue<int> q;
14 int main(){
15     memset(d,0x3f,sizeof d);
16     cin>>n>>sx>>tx;
17     for(int i=1;i<=n;i++){
18         int k;cin>>k;
19         for(int j=1;j<=k;j++){
20             int x;cin>>x;
21             gr[i].push_back(x);
22             dis[i].push_back((j!=1));
23         }
24     }
25     
26     q.push(sx);inq[sx]=true;d[sx]=0;
27     while(!q.empty()){
28         int x=q.front();q.pop();inq[x]=false;
29         for(int i=0;i<gr[x].size();i++)
30             if(d[gr[x][i]]>d[x]+dis[x][i]){
31                 d[gr[x][i]]=d[x]+dis[x][i];
32                 if(!inq[gr[x][i]])q.push(gr[x][i]),inq[gr[x][i]]=true;
33             }
34     }
35     cout<<(d[tx]!=iNF?d[tx]:-1)<<endl;
36     return 0;
37 }
Method_01

  洛谷 0ms

posted @ 2017-11-03 08:12  Darkins  阅读(207)  评论(0)    收藏  举报