#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |