Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int dp[100001];
- int back[100001];
- vector <int> answer;
- int main(int argc, char const *argv[])
- {
- ifstream fin ("input");
- ofstream fout ("output");
- int n, l;
- fin >> n >> l;
- for (int i = 2; i<=n; ++i)
- dp[i] = (1<<29);
- back[1] = 1;
- for (int i = 1; i<=l; ++i)
- {
- int m;
- fin >> m;
- for (int j = 1; j<=m; ++j)
- {
- int target, source, cost;
- fin >> source >> target >> cost;
- if (dp[target] > dp[source] + cost)
- {
- dp[target] = dp[source] + cost;
- back[target] = source;
- }
- }
- }
- if (dp[n] == (1<<29))
- fout << "Impossible";
- else
- {
- int where = n;
- while (where != back[where])
- {
- answer.push_back(where);
- where = back[where];
- }
- answer.push_back(1);
- reverse(answer.begin(), answer.end());
- for (auto x:answer)
- fout << x << ' ';
- fout << '\n' << dp[n];
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement