为什么有三个点TLE了?向大佬求助
查看原帖
为什么有三个点TLE了?向大佬求助
73692
zhangqingya123456楼主2020/9/15 12:57
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> kk;
priority_queue<kk,vector<kk>,greater<kk> > q;
int head[100005],to[200005],ne[200005],W[200005],n,m,s,idx;
int d[100005],b[100005];
int main(){
	scanf("%d%d%d",&n,&m,&s);
	for(int i=1;i<=m;i++){
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		if(u==v) continue;
		ne[++idx]=head[u];
		head[u]=idx;
		to[idx]=v;
		W[idx]=w;
	}
	memset(d,0x3f,sizeof d);
	q.push({0,s});
	d[s]=0;
	while(!q.empty()){
		kk l=q.top();
		q.pop();
		if(b[l.second]==1) continue;
		b[l.second]==1;
		for(int i=head[l.second];i;i=ne[i]){
			if(d[to[i]]>l.first+W[i]){
				d[to[i]]=l.first+W[i];
				q.push({d[to[i]],to[i]});
			}
		}
	}
	for(int i=1;i<=n;i++){
		printf("%d ",d[i]);
	}
}
2020/9/15 12:57
加载中...