#include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f #define maxn 21005 int n,m,s,x,y,z,a,t[1005]; vector<pair<int, int> >mmp[maxn]; int dis[1005]; bool vis[1005]; void spfa(int start) { for(int i=1; i<=n; i++) dis[i]=inf; memset(vis,0,sizeof(vis)); dis[start]=0; vis[start]=1; queue<int>stk; stk.push(start); while(!stk.empty()) { int temp=stk.front(),temp2; stk.pop(); vis[temp]=0; for(int i=0; i<mmp[temp].size(); i++) { temp2=mmp[temp][i].first; if(dis[temp2]>dis[temp]+mmp[temp][i].second) { dis[temp2]=dis[temp]+mmp[temp][i].second; if(vis[temp2]==0) { stk.push(temp2); vis[temp2]=1; } } } } } int main() { ios::sync_with_stdio(false); while(cin>>n>>m>>s) { int ans=inf; while(m--) { cin>>x>>y>>z; mmp[y].push_back(make_pair(x,z)); } cin>>a; for(int i=0; i<a; i++) cin>>t[i]; spfa(s); for(int i=0; i<a; i++) ans=min(ans,dis[t[i]]); if(ans==inf) cout<<-1<<endl; else cout<<ans<<endl; for(int i=1; i<=n; i++) mmp[i].clear(); } return 0; }
HDU - 2680 -(超级源点 || 反向寻找)
最新推荐文章于 2022-03-25 16:02:21 发布