Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- vector<bool> u;
- vector<vector<pair<int, int>>> g;
- void dfs(int v){
- u[v] = true;
- for (pair<int, int>&p : g[v]){
- if (!u[p.first])
- dfs(p.first);
- }
- }
- int main() {
- const int INF = 1e9;
- int n, m;
- cin >> n >> m;
- g.resize(n); u.resize(n);
- int f, t, w;
- for (int i = 0; i < m; ++i) {
- cin >> f >> t >> w;
- f--;
- t--;
- g[f].push_back({t, w});
- }
- vector<int> d(n, -INF);
- vector<int> tmp;
- d[0] = 0;
- for (int k = 0; k < n; ++k) {
- for (int i = 0; i <n ;++i){
- for (pair<int, int> &p : g[i]){
- if (d[i] != -INF && d[p.first] < d[i] + p.second){
- d[p.first] = d[i] + p.second;
- if (k == n-1)
- tmp.push_back(p.first);
- }
- }
- }
- }
- for (int i = 0; i < tmp.size(); ++i)
- dfs(tmp[i]);
- if (u[n-1]) cout << ":)";
- else if (d[n-1] == -INF) cout << ":(";
- else cout << d[n-1];
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement