#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
bool sgn[N], vis[N], vis2[N];
int val[N], num[N];
vector<pair<int, int> > E[N];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int u, v, w;
    cin >> u >> v >> w;
    w *= 2;
    E[u].push_back({v, w});
    E[v].push_back({u, w});
  }
  for (int i = 1; i <= n; i++) {
    if (vis[i]) continue;
    vector<int> V;
    V.push_back(i);
    vis[i] = 1;
    sgn[i] = 1;
    int czy = 0, x = 0;
    for (int j = 0; j < V.size(); j++) {
      int v = V[j];
      for (auto u : E[v]) {
        if (!vis[u.first]) {
          V.push_back(u.first);
          sgn[u.first] = sgn[v] ^ 1;
          val[u.first] = u.second - val[v];
          vis[u.first] = 1;
        } else {
          if (sgn[u.first] != sgn[v]) {
            if (val[u.first] + val[v] != u.second) {
              cout << "NO";
              return 0;
            }
          } else {
            czy = 1;
            if (sgn[v] == 0)
              x = (val[u.first] + val[v] - u.second) / 2;
            else
              x = -(val[u.first] + val[v] - u.second) / 2;
          }
        }
      }
    }
    if (czy) {
    } else {
      vector<int> V2;
      long long B = 0;
      for (int j : V) {
        if (sgn[j])
          V2.push_back(-val[j]);
        else
          V2.push_back(val[j]);
        B -= V2[V2.size() - 1];
      }
      sort(V2.begin(), V2.end());
      int A = V.size();
      A = -A;
      long long opt = 1e18;
      for (int j = 0; j < V2.size(); j++) {
        if (A * V2[j] + B < opt) {
          x = V2[j];
          opt = A * V2[j] + B;
        }
        A += 2;
        B -= 2 * V2[j];
        if (A * V2[j] + B < opt) {
          x = V2[j];
          opt = A * V2[j] + B;
        }
      }
    }
    for (int j : V) {
      if (sgn[j])
        num[j] = x + val[j];
      else
        num[j] = -x + val[j];
    }
  }
  for (int i = 1; i <= n; i++) {
    for (auto u : E[i]) {
      if (num[u.first] + num[i] != u.second) {
        cout << "NO";
        return 0;
      }
    }
  }
  cout << "YES\n";
  for (int i = 1; i <= n; i++) {
    cout << (double)num[i] / 2 << " ";
  }
}
