社区讨论
80pts求条
P5304[GXOI/GZOI2019] 旅行者参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mdr4tz1g
- 此快照首次捕获于
- 2025/07/31 16:28 7 个月前
- 此快照最后确认于
- 2025/11/04 03:25 4 个月前
跑两遍dijkstra做的,WA #8,10,11 求条
CPP#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll M=100009;
const ll INF=1e18+9;
ll T,n,m,k,c,d1[M],d2[M],from[M],to[M],u,v,w,mn;
bool vis1[M],vis2[M];
vector <ll> G1[M],wG1[M],G2[M],wG2[M];
int main(){
cin>>T;
while(T--){
cin>>n>>m>>k;
for(ll i=1;i<=n;i++) d1[i]=d2[i]=INF,vis1[i]=vis2[i]=0,G1[i].clear(),wG1[i].clear(),G2[i].clear(),wG2[i].clear();
for(ll i=1;i<=m;i++){
cin>>u>>v>>w;
G1[u].push_back(v); wG1[u].push_back(w);
G2[v].push_back(u); wG2[v].push_back(w);
}
priority_queue <pair<ll,ll> > pq;
for(ll i=1;i<=k;i++){
cin>>c; d1[c]=d2[c]=0; from[c]=to[c]=c; pq.push(make_pair(0,c));
}
while(!pq.empty()){
v=pq.top().second; pq.pop();
if(vis1[v]) continue;
vis1[v]=1;
for(ll i=0;i<G1[v].size();i++){
u=G1[v][i],w=wG1[v][i];
if(d1[u]>d1[v]+w){
d1[u]=d1[v]+w; from[u]=from[v]; pq.push(make_pair(-d1[u],u));
}
}
}
while(!pq.empty()){
v=pq.top().second; pq.pop();
if(vis2[v]) continue;
vis2[v]=1;
for(ll i=0;i<G2[v].size();i++){
u=G2[v][i],w=wG2[v][i];
if(d2[u]>d2[v]+w){
d2[u]=d2[v]+w; to[u]=to[v]; pq.push(make_pair(-d2[u],u));
}
}
}
mn=INF;
for(ll i=1;i<=n;i++){
for(ll j=0;j<G1[i].size();j++){
u=G1[i][j],w=wG1[i][j];
if(from[i]!=to[u]) mn=min(mn,d1[i]+w+d2[u]);
}
}
cout<<mn<<endl;
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...