dijkstra 78分 , 不知道错哪了
查看原帖
dijkstra 78分 , 不知道错哪了
462047
jimmyfj楼主2022/10/7 14:13

#3,#5 WA

#include <bits/stdc++.h>

using namespace std;

const int M = 200005, N = 100005;
typedef pair<int, int> PII;

int n;
char s, e, c[M << 1];
int l;
int cnt, tot;
int ver[M << 1], ed[M << 1], ne[M << 1], head[N];
int dis[N];
bool vis[M << 1];
char ans;
int sum = INT_MAX;

priority_queue<int, vector<PII>, greater<PII> > q;

void add (char x, char y, int z) {
    tot ++;
    ver[tot] = y - '0';
    ed[tot] = z;
    ne[tot] = head[x - '0'];
    head[x - '0'] = tot;
}

void dijkstra (int s) {
    dis[s] = 0;
    q.push(make_pair(0, s));
    while (!q.empty()) {
        int x = q.top().second;
        q.pop();
        vis[x] = true;
        for (int i = head[x]; i; i = ne[i]) {
            if(!vis[i] && dis[ver[i]] > dis[x] + ed[i]) {
                dis[ver[i]] = dis[x] + ed[i];
                q.push(make_pair(dis[ver[i]], ver[i]));
            }
        }
    }
}

signed main () {
    cin >> n;
    memset(head, 0, sizeof(head));
    memset(dis, 0x3f, sizeof(dis));
    for (int i = 1; i <= n; i++) {
        cin >> s >> e >> l;
        if(s >= 'A' && s < 'Z') cnt ++, c[cnt] = s;
        if(e >= 'A' && e < 'Z') cnt ++, c[cnt] = e;
        add (s, e, l);
        add (e, s, l);
    }
    int k = 'Z' - '0';
    dijkstra(k);
    for (int i = 1; i <= cnt; i ++) {
        if(dis[c[i] - '0'] < sum) {
            sum = dis[c[i] - '0'];
            ans = c[i];
        }
    }
    cout << ans << " " << sum;
    return 0;
}

2022/10/7 14:13
加载中...