Advertisement
vladm98

Untitled

Oct 23rd, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.89 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int dp[100001];
  6. int back[100001];
  7. vector <int> answer;
  8.  
  9. int main(int argc, char const *argv[])
  10. {
  11. ifstream fin ("input");
  12. ofstream fout ("output");
  13. int n, l;
  14. fin >> n >> l;
  15. for (int i = 2; i<=n; ++i)
  16. dp[i] = (1<<29);
  17. back[1] = 1;
  18. for (int i = 1; i<=l; ++i)
  19. {
  20. int m;
  21. fin >> m;
  22. for (int j = 1; j<=m; ++j)
  23. {
  24. int target, source, cost;
  25. fin >> source >> target >> cost;
  26. if (dp[target] > dp[source] + cost)
  27. {
  28. dp[target] = dp[source] + cost;
  29. back[target] = source;
  30. }
  31. }
  32. }
  33. if (dp[n] == (1<<29))
  34. fout << "Impossible";
  35. else
  36. {
  37. int where = n;
  38. while (where != back[where])
  39. {
  40. answer.push_back(where);
  41. where = back[where];
  42. }
  43. answer.push_back(1);
  44. reverse(answer.begin(), answer.end());
  45. for (auto x:answer)
  46. fout << x << ' ';
  47. fout << '\n' << dp[n];
  48. }
  49. return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement