Submission #1287936

#TimeUsernameProblemLanguageResultExecution timeMemory
1287936Hamed_GhaffariGraph (BOI20_graph)C++20
100 / 100
136 ms20360 KiB
#include <bits/stdc++.h> using namespace std; using pii = pair<int, int>; #define X first #define Y second #define SZ(x) int(x.size()) #define all(x) x.begin(), x.end() const int MXN = 2e5+5; int n, m, fr[MXN], to[MXN], w[MXN], rt[MXN]; vector<int> g[MXN], roots, vec[MXN]; pii val[MXN]; bool vis[MXN], mark[MXN], fnd[MXN]; int xf[MXN]; void dfs(int v) { vec[rt[v]].push_back(val[v].Y*(val[v].X>0 ? -1 : 1)); vis[v] = 1; for(int i : g[v]) { int u = v^fr[i]^to[i]; if(vis[u]) continue; val[u].X = -val[v].X; val[u].Y = -val[v].Y+w[i]; mark[i] = 1; rt[u] = rt[v]; dfs(u); } } int sgn(int x) { return x>0 ? 1 : (x<0 ? -1 : 0); } int32_t main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); cin >> n >> m; for(int i=1; i<=m; i++) { cin >> fr[i] >> to[i] >> w[i]; w[i] *= 2; g[fr[i]].push_back(i); g[to[i]].push_back(i); } for(int root=1; root<=n; root++) if(!vis[root]) { val[root] = {root, 0}; rt[root] = root; dfs(root); roots.push_back(root); } for(int i=1; i<=m; i++) if(!mark[i]) { if(val[fr[i]].X+val[to[i]].X) { int y = (w[i]-val[fr[i]].Y-val[to[i]].Y) / (sgn(val[fr[i]].X) + sgn(val[to[i]].X)); if(!fnd[rt[fr[i]]] || (fnd[rt[fr[i]]] && y==xf[rt[fr[i]]])) { fnd[rt[fr[i]]] = 1; xf[rt[fr[i]]] = y; } else { cout << "NO\n"; return 0; } } else if(val[fr[i]].Y+val[to[i]].Y!=w[i]) { cout << "NO\n"; return 0; } } cout << "YES\n"; for(int root : roots) if(!fnd[root]) { sort(all(vec[root])); xf[root] = vec[root][SZ(vec[root])/2]; } for(int i=1; i<=n; i++) { int v = sgn(val[i].X)*xf[rt[i]] + val[i].Y; if(v<0) cout << '-', v = -v; cout << v/2; if(v%2) cout << ".5"; cout << ' '; } cout << '\n'; return 0; }
#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...