1 条题解
-
0
#include<bits/stdc++.h> using namespace std; const int N=100005; typedef long long ll; typedef pair<ll,int> pi; ll dis[N]; int T,n,m,k,d[N]; vector<int> g[N],v[N],e; void add(int x,int y,int w) { g[x].push_back(y),v[x].push_back(w); g[y].push_back(x),v[y].push_back(w); } void dij() { priority_queue<pi,vector<pi>,greater<pi>> q; for(int i:e) q.push(pi(0,i)); while(!q.empty()) { pi x=q.top(); q.pop(); int s=x.second; if(dis[s]>=0||--d[s]>=0) continue; dis[s]=x.first; for(int i=0;i<g[s].size();i++) q.push(pi(dis[s]+v[s][i],g[s][i])); } } int main() { cin>>T; while(T--) { memset(dis,-1,sizeof(dis)); for(int i=1;i<=n;i++) g[i].clear(),v[i].clear(); e.clear(); cin>>n>>m>>k; for(int i=1,x;i<=k;i++) cin>>x,e.push_back(x); for(int i=1;i<=n;i++) cin>>d[i]; for(int i:e) d[i]=0; for(int i=1,x,y,w;i<=m;i++) cin>>x>>y>>w,add(x,y,w); dij(); cout<<dis[1]<<endl; } }
- 1
信息
- ID
- 806
- 时间
- 4000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 2
- 上传者