【悬赏三关注】家人们这题恶心死了不想调了
查看原帖
【悬赏三关注】家人们这题恶心死了不想调了
638141
Literally楼主2023/10/3 23:53

本来自己写的还对只是超时,现在照着题解打优化版都是错的,家人们谁懂啊恶心死了啊啊啊

。。。。。。

#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]<<' ';
}
2023/10/3 23:53
加载中...