dijkstra 78分 , 不知道错哪了

P1529 [USACO2.4] 回家 Bessie Come Home

$LateX$ 打错了
by jimmyfj @ 2022-10-07 14:13:39


@[jimmyfj](/user/462047) 只更改了 dijkstra 函数。 ```cpp #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(); if(vis[x]) continue; vis[x] = true; for (int i = head[x]; i; i = ne[i]) { if(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; } ```
by 柳下惠 @ 2022-10-07 14:28:33


@[柳下惠](/user/539747) 谢谢
by jimmyfj @ 2022-10-07 14:34:08


|