제출 #1072030

#제출 시각아이디문제언어결과실행 시간메모리
1072030belgianbotGraph (BOI20_graph)C++17
100 / 100
113 ms14280 KiB
#include <bits/stdc++.h> #define fi first #define se second using namespace std; vector<vector<pair<int,int>>> adj; vector<bool> processed; double merge(pair<int,int> a, pair<int,int> b) { double nb = a.fi - b.fi; double nbX = b.se - a.se; if (!nbX) { if (!nb) return INT_MAX; else return INT_MIN; } return nb / nbX; } int main() { ios::sync_with_stdio(false); cin.tie(0); int N, M; cin >> N >> M; adj.resize(N); for (int i = 0; i < M; i++) { int a, b, c; cin >> a >> b >> c; a--, b--;; adj[a].push_back({b, c}); adj[b].push_back({a, c}); } vector<double> ans(N, INT_MAX); vector<pair<int,int>> value(N, {INT_MAX, INT_MAX}); processed.resize(N, false); for (int i = 0; i < N; i++) { if (processed[i]) continue; vector<int> in = {i}; double equation = INT_MAX; queue<int> q; q.push(i); processed[i] = true; value[i] = {0, 1}; while (!q.empty()) { int x = q.front(); q.pop(); for (auto [y, c] : adj[x]) { if (processed[y]) { double sol = merge(value[y], {c - value[x].fi, -value[x].se}); if (sol == INT_MIN || (sol != INT_MAX && equation != sol && equation != INT_MAX)) { cout << "NO\n"; return 0; } else if (sol != INT_MAX) equation = sol; } else { processed[y] = true; in.push_back(y); value[y] = {c - value[x].fi, -value[x].se}; q.push(y); } } } if (equation == INT_MAX) { double l = -1000000.0, r = 1000000.0; double best, sum = INT_MAX; while (r - l > 0.000001) { double mid1 = l + (r - l) / 3.0, mid2 = r - (r - l) / 3.0; double res1 = 0.0, res2 = 0.0; for (int x : in) { res1 += abs(value[x].fi + value[x].se * mid1); res2 += abs(value[x].fi + value[x].se * mid2); } if (res1 < res2) { r = mid2; if (res1 < sum) {best = mid1; sum = res1;} } else { l = mid1; if (res2 < sum) {best = mid2;sum = res2;} } } equation = best; } for (int x : in) ans[x] = value[x].fi + equation * value[x].se; } cout << "YES\n"; for (double x : ans) { cout << setprecision(6) << fixed << x << " "; } return 0; }

컴파일 시 표준 에러 (stderr) 메시지

Graph.cpp: In function 'int main()':
Graph.cpp:87:58: warning: 'best' may be used uninitialized in this function [-Wmaybe-uninitialized]
   87 |         for (int x : in) ans[x] = value[x].fi + equation * value[x].se;
      |                                                          ^
#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...