Submission #1287926

#TimeUsernameProblemLanguageResultExecution timeMemory
1287926Hamed_GhaffariGraph (BOI20_graph)C++20
0 / 100
2 ms340 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]; vector<int> g[MXN]; pii val[MXN]; bool vis[MXN], mark[MXN]; void dfs(int v) { 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; dfs(u); } } 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); } val[1] = {1, 0}; dfs(1); bool fnd = 0; int x = -1; 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) / (val[fr[i]].X + val[to[i]].X); if(!fnd || (fnd && y==x)) { fnd = 1; x = 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"; if(!fnd) { vector<int> vec; for(int i=1; i<=n; i++) vec.push_back(val[i].Y*(val[i].X==1 ? -1 : 1)); sort(all(vec)); x = vec[SZ(vec)/2]; } for(int i=1; i<=n; i++) { int v = val[i].X*x + 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...