四个点WA了,求调
查看原帖
四个点WA了,求调
1024631
Howells楼主2025/6/18 18:34

测试点信息

#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 200010, MAX_M = 400010;


long long n, m, s, q, head[MAX_N], vis[MAX_N]={0}, dis[MAX_N], cnt=0;

struct node{
	long long dis;
	int pos;
	bool operator < (const node& o) const{
		return o.dis < dis;
	}
};

struct edge{
	int to;
	long long dis;
	int next;
};


priority_queue<node> que;
edge e[MAX_M];


void add_edge(int u, int v, long long s){
	cnt++;
	e[cnt].to = v;
	e[cnt].dis = s;
	e[cnt].next = head[u];
	head[u] = cnt;
}


void dijiesitera(){
	while (!que.empty()){
		node tmp = que.top();
		int di = tmp.dis, pos = tmp.pos;
		que.pop();
		if (vis[pos]) continue;
		vis[pos] = 1;
		for (int i = head[pos];i;i = e[i].next){
			int vi = e[i].to, si = e[i].dis;
			if (dis[vi] > dis[pos] + si){
				dis[vi] = di +si;
				node pl = {dis[vi], vi};
				que.push(pl);
			}
		}
	}
}


int main(){
	cin>>n>>m>>s>>q;
	for (int i=1;i<=m;++i){
		int ui, vi, si;
		cin>>ui>>vi>>si;
		add_edge(ui, vi, si);
		add_edge(vi, ui, si);
	}
	for (int i=1;i<=n;++i) dis[i] = LLONG_MAX;
	dis[s] = 0;
	node n_f = {0, s};
	que.push(n_f);
	dijiesitera();
	for (int i=1;i<=q;++i){
		int qi;
		cin>>qi;
		cout<<dis[qi]<<endl;
	}
	return 0;
}
2025/6/18 18:34
加载中...