90 分 TLE 于 #2 求助
查看原帖
90 分 TLE 于 #2 求助
363036
chlchl楼主2022/5/31 14:01

rt,代码如下(加快读快输都不行)。

#include<bits/stdc++.h>
using namespace std;

const int N = 5000 + 10;
int n, m, d[N], sec[N];
struct edge{int v, w;};
vector<edge> g[N];
priority_queue<pair<int, int> > q;

void dijkstra(int s){
	for(int i=1;i<=n;i++)	d[i] = sec[i] = 2000000000;
	d[s] = 0;
	q.push(make_pair(0, s));
	while(!q.empty()){
		int u = q.top().second;
		q.pop();
		for(int i=0;i<g[u].size();i++){
			int v = g[u][i].v, w = g[u][i].w;
			if(d[u] + w < d[v]){
				d[v] = d[u] + w;
				q.push(make_pair(d[v], v));
			}else if(d[v] < d[u] + w && d[u] + w < sec[v]){
				sec[v] = d[u] + w;
				q.push(make_pair(d[v], v));
			}else if(sec[v] > sec[u] + w){
				sec[v] = sec[u] + w;
				q.push(make_pair(d[v], v));
			}
		}
	}
}

int main(){
	scanf("%d%d", &n, &m);
	for(int i=1;i<=m;i++){
		int u, v, w;
		scanf("%d%d%d", &u, &v, &w);
		g[u].push_back((edge){v, w});
		g[v].push_back((edge){u, w});
	}
	dijkstra(1);
	printf("%d\n", sec[n]);
	return 0;
}
2022/5/31 14:01
加载中...