#include <bits/stdc++.h>
using namespace std;
long long inf = 1e9;
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  long long n, m;
  cin >> n >> m;
  vector<vector<array<long long, 2>>> g(n);
  for (long long i = 0; i < m; ++i) {
    long long a, b, c;
    cin >> a >> b >> c;
    --a, --b;
    g[a].push_back({b, c});
    g[b].push_back({a, c});
  }
  long long k = 0;
  vector<long long> comp(n);
  vector<long long> first;
  for (long long i = 0; i < n; ++i) {
    if (comp[i]) continue;
    ++k;
    first.push_back(i);
    stack<long long> q;
    q.push(i);
    while (!q.empty()) {
      long long i = q.top();
      q.pop();
      comp[i] = k;
      for (array<long long, 2> p : g[i])
        if (!comp[p[0]]) q.push(p[0]);
    }
  }
  vector<array<long long, 2>> v(n, {inf, inf});
  vector<double> ans(n);
  for (long long c = 0; c < k; ++c) {
    double x = inf;
    v[first[c]] = {inf, 0};
    stack<long long> q;
    q.push(first[c]);
    set<long long> cc;
    while (!q.empty()) {
      long long i = q.top();
      q.pop();
      cc.insert(i);
      if (v[i][0] != inf && v[i][1] != inf) {
        double x1 = (v[i][0] - v[i][1]) * 0.5;
        if (x == inf) x = x1;
        if (x != x1) {
          cout << "NO"
               << "\n";
          exit(0);
        }
      }
      for (array<long long, 2> p : g[i]) {
        long long j = p[0];
        long long y = p[1];
        long long push = 0;
        if (v[j][0] == inf && v[i][1] != inf) push = 1, v[j][0] = y - v[i][1];
        if (v[j][0] != inf && v[i][1] != inf && v[j][0] != y - v[i][1]) {
          cout << "NO"
               << "\n";
          exit(0);
        }
        if (v[j][1] == inf && v[i][0] != inf) push = 1, v[j][1] = y - v[i][0];
        if (v[j][1] != inf && v[i][0] != inf && v[j][1] != y - v[i][0]) {
          cout << "NO"
               << "\n";
          exit(0);
        }
        if (push) q.push(j);
      }
    }
    if (x == inf) {
      vector<double> zero;
      for (long long i : cc) {
        if (v[i][0] != inf)
          zero.push_back(v[i][0]);
        else if (v[i][1] != inf)
          zero.push_back(-v[i][1]);
      }
      sort(zero.begin(), zero.end());
      cout << endl;
      x = zero[zero.size() / 2];
    }
    for (long long i : cc) {
      if (v[i][0] != inf)
        ans[i] = double(v[i][0]) - x;
      else if (v[i][1] != inf)
        ans[i] = double(v[i][1]) + x;
    }
  }
  cout << "YES"
       << "\n";
  cout << fixed << setprecision(1);
  for (double i : ans) cout << (i < inf ? i : 0) << " ";
  cout << "\n";
}
