FuckYouJinhai @ 2022-12-12 13:16:10
感觉问题有点大/zhq
#include<bits/stdc++.h>
#include<ext/pb_ds/priority_queue.hpp>
using namespace std;
using namespace __gnu_pbds;
struct edge{
int to,next,value;
edge(int T,int N,int V){to=T;next=N;value=V;}
};
vector<edge>e;
int head[100010];
inline void addEdge(int s,int E,int v){
static int Cnt=0;
e.push_back(edge(E,v,head[s]));
head[s]=Cnt++;
}//维克托实现链式前向星
__gnu_pbds::priority_queue<std::pair<int,int>,std::greater<std::pair<int,int>>,thin_heap_tag>q;//斐波那契堆
//怄火、挥手、街舞、转圈
long long dis[100020];
inline void dij(int s){
memset(dis,0x3f,sizeof(dis));
dis[s]=0;q.push(make_pair(0,s));//玄学操作
while(!q.empty()){
int to=q.top().second,value=q.top().first;q.pop();//Good bye
if(value!=dis[to])continue;//松弛
for(int i=head[to];i;i=e[i].next){
int to2=e[i].to,value2=e[i].value;
if(dis[to]+value2<dis[to2])
dis[to2]=dis[to]+value2,q.push(make_pair(dis[to2],value2));
}
}
}
int n,m,s;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
cin>>n>>m>>s;
for(int i=1;i<=m;++i){
int u,v,w;
cin>>u>>v>>w;
addEdge(u,v,w);
}
dij(s);
for(int i=1;i<=n;++i)cout<<dis[i]<<" ";
return 0;
}
by robinyqc @ 2022-12-12 15:33:25
什么离谱注释
by liangbowen @ 2022-12-12 16:00:35
@FiveUnderlines 建议去看一下别人 dij 的代码,您都没有加标记,还有注释是不是乱加的
if(value!=dis[to])continue;//松弛
by FuckYouJinhai @ 2022-12-12 16:00:58
@liangbowen 是乱加的没错啊(