本来自己写的还对只是超时,现在照着题解打优化版都是错的,家人们谁懂啊恶心死了啊啊啊
#include <iostream>
#include <vector>
#include <cstring>
#include <queue>
using namespace std;
int n,m,u,v,w,distant,ver,cnt=0,p;//cnt=编号
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
struct node{
int to;
int w;
int next;
};
int dist[100010];
bool used[100010];
node edge[100010];
int head[100010];
void add_edge(int u,int v,int w){
edge[cnt].to=v;
edge[cnt].w=w;
edge[cnt].next=head[u];
head[u]=cnt;
cnt++;
}
int main(){
cin>>n>>m>>p;
for(int i=1;i<=m;i++){
cin>>u>>v>>w;
add_edge(u,v,w);
//distant=first,end=second
}
memset(dist,0x3f,sizeof(dist));
dist[1]=0;
q.push({0,1});
while(q.size()){
auto k=q.top();
q.pop();
distant=k.first;
ver=k.second;
if(used[ver]) continue;
used[ver]=1;
for(int i=head[ver];i!=0;i=edge[i].next){
int j=edge[i].to;
if(edge[i].w+distant < dist[j]){
dist[j]=edge[i].w+distant;
q.push({dist[j],j});
}
}
}
for(int i=1;i<=n;i++) cout<<dist[i]<<' ';
}