dinhvietthanhdanh8
Rating
-
Bài tập
1
Điểm
1601
Rating #
-
Điểm #
17844
Giới thiệu
include <bits/stdc++.h>
define endl '\n'
using namespace std;
using ll = long long;
const ll INF = 1e18;
struct Edge {
ll u, v, w;
Edge(ll _u, ll _v, ll _w) : u(_u), v(_v), w(_w) {}
};
ll n, m, last;
void solve() {
cin >> n >> m;
vector<Edge> edges;
vector<ll> par(n + 1, -1);
vector<ll> dist(n + 1, INF);
for (int i = 0; i < m; i++) {
ll a, b, c;
cin >> a >> b >> c;
edges.emplace_back(a, b, c);
}
dist[1] = 0;
for (int i = 1; i < n; i++) {
last = -1;
for (auto ed : edges) {
if (dist[ed.u] != INF && dist[ed.u] + ed.w < dist[ed.v]) {
dist[ed.v] = dist[ed.u] + ed.w;
par[ed.v] = ed.u;
last = ed.v;
}
}
}
// Kiểm tra chu trình âm
for (auto ed : edges) {
if (dist[ed.u] != INF && dist[ed.u] + ed.w < dist[ed.v]) {
last = ed.v;
break;
}
}
if (last == -1) {
cout << "NO" << endl;
return;
}
vector<ll> ans;
for (ll cur = last;; cur = par[cur]) {
ans.push_back(cur);
if (cur == last && ans.size() > 1) break;
}
reverse(ans.begin(), ans.end());
cout << "YES" << endl;
for (auto i : ans) cout << i << " ";
cout << endl;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
solve();
}