电车(洛谷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 }
洛谷 0ms

浙公网安备 33010602011771号