제출 #1052173

#제출 시각아이디문제언어결과실행 시간메모리
1052173duckindogGraph (BOI20_graph)C++17
0 / 100
2 ms3164 KiB
#include <bits/stdc++.h> using namespace std; const int N = 100'000 + 10, MAX = 1'000'000'000; int n, m; vector<pair<int, int>> ad[N]; int a[N]; bool mk[N]; int32_t main() { cin.tie(0)->sync_with_stdio(0); cin >> n >> m; for (int i = 1; i <= m; ++i) { int u, v, w; cin >> u >> v >> w; w *= 10; ad[u].push_back({v, w}); ad[v].push_back({u, w}); } auto cal = [&](int x) { memset(mk, false, sizeof mk); mk[1] = true; a[1] = x; queue<int> q({1}); int ret = 0; while (q.size()) { auto u = q.front(); q.pop(); ret += abs(a[u]); for (const auto& [v, w] : ad[u]) { if (!mk[v]) { a[v] = w - a[u]; mk[v] = true; q.push(v); } if (w - a[u] != a[v]) return MAX; } } return ret; }; int st = -1; int answer = MAX; for (int x = -100; x <= 300; ++x) { int value = cal(x); if (answer > value) { answer = value; st = x; } } if (st == -1) { cout << "NO" << "\n"; return 0; } cal(st); cout << "YES" << "\n"; for (int i = 1; i <= n; ++i) { if (a[i] < 0) cout << '-' << a[i] / 10 << "." << abs(a[i]) % 10 << " "; else cout << a[i] / 10 << "." << abs(a[i]) % 10 << " "; } cout << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...