超时求助
查看原帖
超时求助
45199
_TLJYatm_楼主2021/10/30 22:45
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,m,u,v,tot,to[N*3],head[N],nex[N*3],vis[N];
long long w,dis[N],a[N],val[N*3];
void add(int u1,int v1,long long w1){
	to[++tot]=v1;
	val[tot]=w1;
	nex[tot]=head[u1];
	head[u1]=tot;
}
priority_queue< pair<long long,int>, vector< pair<long long,int> >, greater< pair<long long,int> > > q;
void dijkstra(){
	memset(dis,0x3f,sizeof(dis));
	dis[0]=0; q.push(make_pair(0,0));
	while(!q.empty()){
		pair<long long,int> k=q.top(); q.pop(); int u=k.second; long long s=k.first;
		if (vis[u]) continue;
		vis[u]=1;
		for (int e=head[u]; e; e=nex[e]){
			int v=to[e]; long long w=val[e];
			if (dis[v]>dis[u]+w){
				dis[v]=dis[u]+w;
				q.push(make_pair(dis[v],v));
			}
		}
	}
}
int main(){
	scanf("%d%d",&n,&m);
	for (int i=1; i<=m; i++){
		scanf("%d%d%lld",&u,&v,&w);
		add(u,v,w*2); add(v,u,w*2);
	}
	for (int i=1; i<=n; i++){
		scanf("%lld",&a[i]);
		add(0,i,a[i]); add(i,0,a[i]);
	}
	dijkstra();
	for (int i=1; i<=n; i++) printf("%lld ",dis[i]);
}

为什么n=m=200000n=m=200000时超时了啊

2021/10/30 22:45
加载中...