求助,三个点TLE
查看原帖
求助,三个点TLE
255422
Acto416楼主2020/8/1 21:00
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
using namespace std;

#define Max 100010
#define INF 2147483647

vector<pair<int,int> > v[2 * Max];
int dis[Max];

void Dijkstra(int x){
    dis[x] = 0;
    priority_queue<pair<int,int> > q;
    q.push(make_pair(-dis[x],x));
    while(!q.empty()){
        int now = q.top().second;
        q.pop();
        for (int i = 0; i < v[now].size(); i++){
            int t = v[now][i].first;
            if(dis[t] > dis[now] + v[now][i].second){
                dis[t] = dis[now] + v[now][i].second;
                q.push(make_pair(-dis[t],t));
            }
        }
    }
}

int main(void){
    int n,m,s;
    cin >> n >> m >> s;
    int a,b,c;
    for (int i = 0; i < m; i++){
        scanf("%d%d%d",&a,&b,&c);
        v[a].push_back(make_pair(b,c));
    }
    fill(dis+1,dis+n+1,INF);
    Dijkstra(s);
    for (int i = 1; i <= n; i++){
        if(i == 1) printf("%d",dis[i]);
        else printf(" %d",dis[i]);
    }
    return 0;
}

大佬们,该怎么优化啊

2020/8/1 21:00
加载中...