Dijkstra求助
  • 板块题目总版
  • 楼主WD2c0mP
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/3/8 21:34
  • 上次更新2023/10/23 22:38:43
查看原帖
Dijkstra求助
780641
WD2c0mP楼主2023/3/8 21:34

P1629 Dijkstra 50ptsTLE求助!!

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,s,dis[1010][1010],vis[100010];
vector<pair<int,int> >G[500010];
void Dijkstra(int s){
	memset(vis,0,sizeof(vis));
	priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q; //first是距离 second是到达点 
	dis[s][s] = 0;
	q.push(make_pair(0,s));
	while (!q.empty()) {
		pair<int,int>u = q.top();
		q.pop();
		int x = u.second;
		if (vis[x]) continue;
		vis[x] = 1;
		for (unsigned i = 0;i < G[x].size();i ++) {
			int y = G[x][i].first;
			if (dis[s][y] > dis[s][x] + G[x][i].second) {
			    dis[s][y] = dis[s][x] + G[x][i].second;
			    if (!vis[y]) {
			        q.push(make_pair(dis[s][y],y));
			    }
			}
		}
	}
}
signed main() {
	cin >> n >> m;
	memset(dis,0x3f,sizeof(dis));
	for (int i = 1;i <= m;i ++) {
		int u,v,w;
		cin >> u >> v >> w;
		G[u].push_back(make_pair(v,w));
	}
	for (int i = 1;i <= n;i ++) {
		Dijkstra(i);
	}
	int sum = 0;
	for (int i = 2;i <= n;i ++) {
		sum += dis[1][i];
		sum += dis[i][1];
	}
	cout << sum << endl;
	return 0; 
}
2023/3/8 21:34
加载中...