fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. const int MAXN = 52;
  5. int dis[MAXN], adj[MAXN][MAXN], notvis[MAXN], n = MAXN;
  6.  
  7. void dijkstra(int src) {
  8. int sz = n;
  9. for (int i = 0; i < n; i++) dis[i] = 1e9;
  10. dis[src] = 0;
  11. int nxt = src;
  12. iota(begin(notvis), end(notvis), 0);
  13. while (nxt != -1) {
  14. int u = notvis[nxt];
  15. notvis[nxt] = notvis[--sz];
  16. nxt = -1;
  17. int best = 1e9;
  18. for (int i = 0; i < sz; i++) {
  19. int v = notvis[i];
  20. if (dis[v] > dis[u] + adj[u][v]) dis[v] = dis[u] + adj[u][v];
  21. if (dis[v] < best) best = dis[v], nxt = i;
  22. }
  23. }
  24. }
  25.  
  26. void solve(int tc) {
  27. int m; cin >> m;
  28. map<char, int> idx;
  29.  
  30. for (char i = 'a'; i <= 'z'; i++) idx[i] = i - 'a';
  31. for (char i = 'A'; i <= 'Z'; i++) idx[i] = i - 'A' + 26;
  32.  
  33. for (char i = 'a'; i <= 'z'; i++) {
  34. for (char j = 'A'; j <= 'Z'; j++) adj[idx[i]][idx[j]] = 1e9, adj[idx[j]][idx[i]] = 1e9;
  35. }
  36.  
  37. for (int i = 0, w; i < m; i++) {
  38. char a,b; cin >> a >> b >> w;;
  39. int x = idx[a], y = idx[b];
  40. adj[x][y] = min(adj[x][y], w);
  41. adj[y][x] = min(adj[y][x], w);
  42. }
  43.  
  44. dijkstra(idx['Z']);
  45. int ans = 1e18;
  46. char x;
  47. for (char i = 'A'; i < 'Z'; i++) {
  48. cout << dis[idx[i]] << '\n';
  49. int ix = idx[i];
  50. if (dis[ix] < ans) {
  51. ans = dis[x];
  52. x = i;
  53. }
  54. }
  55. // cout << x << ' ' << ans << '\n';
  56. }
  57.  
  58. signed main() {
  59. ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
  60. int t = 1;
  61. // cin >> t;
  62. for (int i = 1; i <= t; i++){
  63. solve(i);
  64. }
  65. }
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0