diji

const int maxn = 2e5 + 5;
const int INF = 0x3f3f3f3f;
struct node {
    int num, dis;
    node(int n,int d):num(n),dis(d){}
    bool operator < (const node& a)const {
        if (dis == a.dis)return num < a.num;
        return dis < a.dis;
    }
};
vector<node>g[maxn];
int dis[maxn];
int n, a, b, c;

void diskstra(int s) {
    memset(dis, INF, sizeof(dis));
    dis[s] = 0;
    priority_queue<node>q;
    q.push(node(s, dis[s]));
    while (!q.empty()) {
        node x = q.top(); q.pop();
        for (int i = 0; i < g[x.num].size(); i++) {
            node y = g[x.num][i];
            if (x.dis + y.dis < dis[y.num]) {
                dis[y.num] = x.dis + y.dis;
                q.push(node(y.num, dis[y.num]));
            }
        }
    }
}

int main() {
    cin >> n;
    for (int i = 0; i < n; ++i) {
        cin >> a >> b >> c;
        g[a].push_back(node(b, c));
        g[b].push_back(node(a, c));
    }
    diskstra(1);
    for (int i = 1; i <= n; ++i)
        cout << dis[i] << ' ';
    cout << endl;
    return 0;
}

 

posted @ 2020-02-06 12:42  Kiana-  阅读(71)  评论(0)    收藏  举报