Dijkstra求助
  • 板块学术版
  • 楼主WD2c0mP
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/3/10 18:03
  • 上次更新2023/10/23 22:01:33
查看原帖
Dijkstra求助
780641
WD2c0mP楼主2023/3/10 18:03

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/10 18:03
加载中...