#include <bits/stdc++.h>
using namespace std;
ifstream fin("AAtest.in.txt");
int n, m, a, b, c;
double cc = 1e9, dd = 0.0000001, su = 1000000, vahe = 0;
struct item {
  bool kyl = 0;
  double d = cc;
  vector<int> na, v;
} p[100005];
double proov(double f, vector<int> v) {
  double su = abs(f);
  p[v[0]].d = f;
  for (int i : v) {
    for (int(j) = (0); ((j)) < ((p[i].na.size())); ((j))++) {
      double d = p[i].d;
      int k = p[i].na[j];
      if (p[k].d == cc) {
        p[k].d = p[i].v[j] - d;
        su += abs(p[k].d);
      } else if (p[k].d > p[i].v[j] - d + dd or p[k].d < p[i].v[j] - d - dd) {
        vahe = p[k].d - p[i].v[j] + d;
        return cc;
      }
    }
  }
  return su;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cerr.tie(0);
  cin >> n >> m;
  for (int(i) = (0); ((i)) < ((m)); ((i))++) {
    cin >> a >> b >> c;
    p[a].na.emplace_back(b), p[a].v.emplace_back(c), p[b].na.emplace_back(a),
        p[b].v.emplace_back(c);
  }
  for (int i = 1; i <= n; i++)
    if (!p[i].kyl) {
      p[i].kyl = 1;
      vector<int> v = {i};
      int in = 0;
      while (v.size() > in) {
        int j = v[in];
        for (int(k) = (0); ((k)) < ((p[j].na.size())); ((k))++) {
          int f = p[j].na[k];
          if (!p[f].kyl) {
            p[f].kyl = 1;
            v.emplace_back(f);
          }
        }
        in++;
      }
      double L = -100000, R = 100000, l, r, alg;
      bool ei = 0;
      while (L < R - dd) {
        l = L + (R - L) / 3, r = L + 2 * (R - L) / 3;
        for (int i : v) p[i].d = cc;
        double lv = proov(l, v);
        if (lv == cc) {
          ei = 1;
          alg = l;
          break;
        }
        for (int i : v) p[i].d = cc;
        double rv = proov(r, v);
        if (lv <= rv)
          R = r;
        else
          L = l;
      }
      if (ei) {
        for (int i : v) p[i].d = cc;
        double alg1 = alg - vahe / 2, alg2 = alg + vahe / 2;
        double lv = proov(alg1, v);
        if (lv == cc) {
          for (int i : v) p[i].d = cc;
          lv = proov(alg2, v);
          if (lv == cc) {
            cout << "NO";
            return 0;
          }
        }
      }
    }
  cout << "YES" << endl;
  for (int i = 1; i <= n; i++)
    cout << setprecision(6) << fixed << p[i].d << " ";
}
