求助,孩子WA飞了
查看原帖
求助,孩子WA飞了
752094
MornHus楼主2023/1/7 22:37

样例过了,但是16pts。 用的dijkstra+堆优化 可能存图方法有点奇怪:

#include<bits/stdc++.h>
#define maxn 100001
#define maxm 200001
#define inf 0x3f3f3f3f
using namespace std;
int n,m,s,u,v,w;
struct node{
	int to,val;
};
bool vis[maxn];
vector<node>gragh[maxn];
int dis[maxn];
struct point{
	int id,distance;
	bool operator < (const point &a)const{
		return distance<a.distance;	
	} 
};
priority_queue<point>q;
inline void dijkstra(){
	for(int i=1;i<=n;i++){
		if(i==s)continue;
		dis[i]=inf;
	}
	q.push({s,0});
	while(!q.empty()){
		point curr=q.top();q.pop();
		if(vis[curr.id])continue;
		vis[curr.id]=1;
		for(int i=0;i<gragh[curr.id].size();i++){
			if(dis[gragh[curr.id][i].to]>dis[curr.id]+gragh[curr.id][i].val){
				dis[gragh[curr.id][i].to]=dis[curr.id]+gragh[curr.id][i].val;
				q.push({gragh[curr.id][i].to,dis[gragh[curr.id][i].to]});
			}
		}
	}
}
int main(){
	scanf("%d %d %d",&n,&m,&s);
	for(int i=1;i<=m;i++){
		scanf("%d %d %d",&u,&v,&w);
		gragh[u].push_back({v,w});
	}
	dijkstra();
	for(int i=1;i<=n;i++){
		printf("%d ",dis[i]);
	}
	return 0;
}

2023/1/7 22:37
加载中...