求助#5一直wa
查看原帖
求助#5一直wa
307940
aaaaaaaawsl楼主2021/7/28 10:19
#include<bits/stdc++.h>
using namespace std;
int dis[100005], s, n, m, u, v, w;

struct noode{
	int to;
	int nt;
	int num;
}dij[400005];

int cnt;
int head[100005];
bool vis[100005];


void add(int a, int b, int c){
	cnt ++;
	dij[cnt].to = b;
	dij[cnt].num = c;
	dij[cnt].nt = head[a];
	head[a] = cnt;
}

struct node{
    int ds;
    int ps;
    bool operator <( const node &x )const{
        return x.ds < ds;
    }
};

priority_queue<node> q;


void dj(){
	q.push( (node) {0, s} );
	while(!q.empty()){
        node tp = q.top();
        q.pop();
        int x = tp.ps, d = tp.ds;
        if(vis[x])
            continue;
        vis[x] = 1;
        for(int i = head[x]; i ; i = dij[i].nt){
            int y = dij[i].to;
            if(dis[y] > dis[x] + dij[i].num){
                dis[y] = dis[x] + dij[i].num;
                if(!vis[y])
                    q.push( ( node ) {dis[y], y} );
            }
        }
    }
}

int main(){
	scanf("%d%d%d", &n, &m, &s);
	for(int i = 1; i <= n; ++ i)
		dis[i] = 0x7ffffff;
	for(int i = 1; i <= m; ++ i){
		scanf("%d%d%d", &u, &v, &w);
		add(u, v, w);
	}
	
	dis[s] = 0;
	dj();
	for(int i = 1 ; i <= n ; ++ i)
		printf("%d ", dis[i]);
	return 0;
	
}
2021/7/28 10:19
加载中...