社区讨论

20pts堆优化求救

P3371【模板】单源最短路径(弱化版)参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lpse13le
此快照首次捕获于
2023/12/05 21:40
2 年前
此快照最后确认于
2023/12/06 10:52
2 年前
查看原帖
样例过了,但几乎全WA,违规紫衫
CPP

#include<bits/stdc++.h>
using namespace std;
struct node{
	long long w;
	long long v;
};
struct dtc{
	long long dis;
	long long tp;
}; 
struct Xsort{bool operator()(dtc q,dtc p){return q.dis<p.dis;}};
vector<node>a[100005];
void Dijkstra(long long n,long long m,long long s){
	long long f[100005],distance[100005];
	priority_queue<long long,vector<dtc>,Xsort>d;
	for(int i=1;i<=n;i++)
		distance[i]=pow(2,31)-1;
	distance[s]=0;
	d.push((dtc){0,s});
	memset(f,0,sizeof(f));
	while(!d.empty()){
		dtc ud=d.top();
		d.pop();
		if(f[ud.tp])
			continue;
		f[ud.tp]=1;
		for(int i=0;i<a[ud.tp].size();i++)
			if(a[ud.tp][i].v+distance[ud.tp]<distance[a[ud.tp][i].w])
				distance[a[ud.tp][i].w]=a[ud.tp][i].v+distance[ud.tp],d.push((dtc){distance[a[ud.tp][i].w],a[ud.tp][i].w});
	}
	for(int i=1;i<=n;i++)
		cout<<distance[i]<<" ";
	return;
}
int main(){
	long long n,m,s,i,x,y,u;
	cin>>n>>m>>s;
	for(i=1;i<=m;i++){
		cin>>x>>y>>u;
		a[x].push_back((node){y,u});
	//  a[y].push_back((node){x,u});  //无 向 图   
	}
	Dijkstra(n,m,s);
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...