Advertisement
Guest User

Untitled

a guest
Mar 19th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. #define F first
  4. #define S second
  5. #define pb push_back
  6.  
  7. using namespace std;
  8. int main() {
  9. unordered_map < string, int > nom;
  10. vector < int > ot;
  11. ios_base::sync_with_stdio(0);
  12. cin.tie(0);
  13. cout.tie(0);
  14. freopen("input.txt","r",stdin);
  15. freopen("output.txt","w",stdout);
  16. int n, m;
  17. cin >> n >> m;
  18. string t[n];
  19. for (int i = 0; i < n; ++i) {
  20. cin >> t[i];
  21. nom[t[i]] = i;
  22. }
  23. vector < vector < int > > g(n);
  24. for (int i = 0; i < m; ++i) {
  25. int x, y;
  26. cin >> x >> y;
  27. --x;
  28. --y;
  29. g[x].pb(y);
  30. g[y].pb(x);
  31. }
  32. vector < string > r(n);
  33. r[0] = t[0] + '|';
  34. priority_queue < pair < int, int > > q;
  35. q.push({-r[0].size(), 0});
  36. while (!q.empty()) {
  37. int v = q.top().S, w = -q.top().F;
  38. q.pop();
  39. if (r[v].size() != w) continue;
  40. for (auto to : g[v])
  41. if (r[to].empty() || (r[to].size() > w + t[to].size() + 1) || (r[to].size() == w + t[to].size() + 1 && r[to] > r[v] + t[to] + '|')) {
  42. r[to] = r[v] + t[to] + '|';
  43. q.push({-r[to].size(), to});
  44. }
  45. }
  46. // cout << r[n - 1];
  47. // return 0;
  48. string now;
  49. for (int i = 0; i < r[n - 1].size(); ++i)
  50. if (r[n - 1][i] == '|') {
  51. ot.pb(nom[now] + 1);
  52. now.clear();
  53. }
  54. else now += r[n - 1][i];
  55. cout << ot.size() << '\n';
  56. for (int i = 0; i < ot.size(); ++i)
  57. cout << ot[i] << ' ';
  58. return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement