#include <bits/stdc++.h>
using namespace std;
const int NN = 1e9 + 7;
const int N = 2e5 + 7;
const int M = 25;
const long long mod = 1e9 + 7;
const int inf = 1e9 + 7;
const double long rf = 1e-14;
const int B = sqrt(N);
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int n, m;
double long d[N];
int f[N][2];
bool used[N][2];
vector<int> cp;
vector<pair<int, int> > v[N];
void dfs(int x, int ti, int va) {
  if (f[x][ti] != va && f[x][ti] != inf) {
    cout << "NO\n";
    exit(0);
  }
  f[x][ti] = va;
  if (used[x][ti]) return;
  cp.push_back(x);
  used[x][ti] = true;
  for (auto y : v[x]) {
    dfs(y.first, 1 - ti, y.second - va);
  }
}
void foo(int x) {
  cp.clear();
  dfs(x, 0, 0);
  double long res = 0.0;
  bool fuk = false;
  for (auto y : cp) {
    if (f[y][0] != inf && f[y][1] != inf) {
      res = (f[y][1] - f[y][0]) * 1.0 / 2.0;
      fuk = true;
      break;
    }
  }
  for (auto y : cp) {
    if (f[y][0] != inf && f[y][1] != inf) {
      if (fabs(2 * res - (f[y][1] - f[y][0]) * 1.0) > 1e-8) {
        cout << "NO\n";
        exit(0);
      }
    }
    if (f[y][0] != inf)
      d[y] = f[y][0] * 1.0 + res;
    else
      d[y] = f[y][1] * 1.0 - res;
  }
  if (fuk) return;
  double long l = -100000.0, r = 1000000.0;
  for (int i = 1; i <= 100; i++) {
    double long m1 = l + (r - l) / 3.0;
    double long m2 = r - (r - l) / 3.0;
    double long sum1 = 0;
    double long sum2 = 0;
    for (auto y : cp) {
      if (f[y][0] != inf) {
        sum1 += fabs(f[y][0] * 1.0 + m1);
        sum2 += fabs(f[y][0] * 1.0 + m2);
      } else {
        sum1 += fabs(f[y][1] * 1.0 - m1);
        sum2 += fabs(f[y][1] * 1.0 - m2);
      }
    }
    if (sum1 < sum2) {
      r = m2;
    } else
      l = m1;
  }
  l = (l + r) / 2.0;
  for (auto y : cp) {
    if (f[y][0] != inf) {
      d[y] = f[y][0] * 1.0 + l;
    } else {
      d[y] = f[y][1] * 1.0 - l;
    }
  }
}
void solve1() {
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    int a, b, c;
    cin >> a >> b >> c;
    v[a].push_back({b, c});
    v[b].push_back({a, c});
  }
  for (int i = 1; i <= n; i++) {
    f[i][0] = f[i][1] = inf;
  }
  for (int i = 1; i <= n; i++) {
    if (!used[i][0] && !used[i][1]) {
      foo(i);
    }
  }
  cout << "YES\n";
  cout.precision(7);
  for (int i = 1; i <= n; i++) {
    cout << fixed << d[i] << " ";
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int cghf = 1;
  while (cghf--) {
    solve1();
  }
}
