专栏文章
题解:P11966 [GESP202503 八级] 上学
P11966题解参与者 3已保存评论 2
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @miprajfr
- 此快照首次捕获于
- 2025/12/03 16:39 3 个月前
- 此快照最后确认于
- 2025/12/03 16:39 3 个月前
思路
我们发现图是双向的。 到 的距离等于 到 的距离。所以我们可以从学校进行一遍最短路。来统计答案。
代码
CPP#include<bits/stdc++.h>
using namespace std;
long long n,m,t,b[200001],d[200001],qd;
vector<pair<long long,long long>>a[200001];
set<pair<long long,long long>>c;
void dijkstra(){
for(long long i=1;i<=n;i++){
b[i]=1e18;
c.insert({b[i],i});
}
c.erase({b[qd],qd});
c.insert({0,qd});
b[qd]=0;
for(;!c.empty();){
long long x=(*c.begin()).second;
c.erase(c.begin());
for(auto j:a[x]){
if(b[x]+j.second<b[j.first]){
c.erase({b[j.first],j.first});
b[j.first]=b[x]+j.second,d[j.first]=x;
c.insert({b[j.first],j.first});
}
}
}
}
int main(){
scanf("%lld%lld%lld%lld",&n,&m,&qd,&t);
for(long long i=1;i<=m;i++){
long long x,y,z;
scanf("%lld%lld%lld",&x,&y,&z);
a[x].push_back({y,z});
a[y].push_back({x,z});
}
dijkstra();
for(long long i=1;i<=t;i++){
long long x;
scanf("%lld",&x);
printf("%lld\n",b[x]);
}
}
相关推荐
评论
共 2 条评论,欢迎与作者交流。
正在加载评论...