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