Submission #342924

#TimeUsernameProblemLanguageResultExecution timeMemory
342924mjhmjh1104Graph (BOI20_graph)C++14
0 / 100
2 ms2668 KiB
#include <cstdio> #include <vector> #include <algorithm> using namespace std; int n, m; int a[100006], c[100006]; bool visited[100006]; vector<pair<int, int>> adj[100006]; vector<double> v; void dfs(int x, int prev = -1) { visited[x] = true; for (auto &i: adj[x]) if (i.first != prev) { if (!visited[i.first]) { a[i.first] = -a[x]; c[i.first] = i.second - c[x]; dfs(i.first, x); } else { if (a[i.first] + a[x] == 0) { if (c[i.first] + c[x] != i.second) { puts("NO"); exit(0); } } else v.push_back((double)(i.second - c[i.first] - c[x]) / (a[i.first] + a[x])); } } } double f(double x) { double res = 0; for (int i = 0; i < n; i++) res += abs(a[i] * x + c[i]); return res; } int main() { scanf("%d%d", &n, &m); while (m--) { int u, v, c; scanf("%d%d%d", &u, &v, &c); u--, v--; adj[u].push_back({ v, c }); adj[v].push_back({ u, c }); } a[0] = 1, c[0] = 0; dfs(0); if (v.empty()) { puts("YES"); double l = -2000, r = 2000; while (r - l > 0.000000001) { double p = (l + l + r) / 3; double q = (l + r + r) / 3; if (f(p) < f(q)) r = q; else l = p; } for (int i = 0; i < n; i++) for (auto &j: adj[i]) if (a[i] * l + c[i] + a[j.first] * l + c[j.first] != j.second) return 1; for (int i = 0; i < n; i++) printf("%.10f ", a[i] * l + c[i]); } else { sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end()); if (v.size() != 1) puts("NO"); else { puts("YES"); for (int i = 0; i < n; i++) printf("%.10f ", a[i] * v[0] + c[i]); } } }

Compilation message (stderr)

Graph.cpp: In function 'int main()':
Graph.cpp:37:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   37 |     scanf("%d%d", &n, &m);
      |     ~~~~~^~~~~~~~~~~~~~~~
Graph.cpp:40:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   40 |         scanf("%d%d%d", &u, &v, &c);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~
#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...