#include <bits/stdc++.h>
using namespace std;
const int MAXN = (int)2e5 + 5;
const int INF = (int)1e9;
vector<pair<int, int> > adj[MAXN];
array<int, 3> e[MAXN];
bool used[MAXN];
pair<int, int> coef[MAXN];
double ans[MAXN];
int n, m;
vector<int> comp;
int bad, forced;
void link(pair<int, int> a, pair<int, int> b, int w) {
  int top = w - (a.first + b.first);
  int bottom = b.second + a.second;
  if (bottom == 0) {
    if (top != 0) {
      bad = 1;
    }
  } else {
    assert(abs(bottom) == 2);
    if (bottom < 0) {
      top = -top;
      bottom = -bottom;
    }
    if (forced != INF && forced != top) {
      bad = 1;
    }
    forced = top;
  }
}
void dfs(int v) {
  used[v] = 1;
  comp.push_back(v);
  for (auto &[to, w] : adj[v]) {
    if (!used[to]) {
      coef[to] = make_pair(w - coef[v].first, -coef[v].second);
      dfs(to);
    } else {
      link(coef[v], coef[to], w);
    }
  }
}
void solve() {
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= m; ++i) {
    int u, v, w;
    scanf("%d %d %d", &u, &v, &w);
    e[i] = {u, v, w};
    adj[u].emplace_back(v, w);
    adj[v].emplace_back(u, w);
  }
  for (int i = 1; i <= n; ++i) {
    if (!used[i]) {
      coef[i] = make_pair(0, 1);
      bad = 0;
      forced = INF;
      comp.clear();
      dfs(i);
      if (bad) {
        printf("NO\n");
        return;
      }
      if (forced != INF) {
        for (int v : comp) {
          ans[v] = coef[v].first + coef[v].second * (forced / 2.0);
        }
      } else {
        vector<int> pts;
        for (int v : comp) {
          int a = coef[v].first, b = coef[v].second;
          if (b == -1) {
            pts.push_back(a);
          } else {
            pts.push_back(-a);
          }
        }
        sort((pts).begin(), (pts).end());
        int x = pts[pts.size() / 2];
        for (int v : comp) {
          ans[v] = coef[v].first + x * coef[v].second;
        }
      }
    }
  }
  printf("YES\n");
  for (int i = 1; i <= n; ++i) {
    printf("%.6f ", ans[i]);
  }
}
int main() {
  int tt = 1;
  while (tt--) {
    solve();
  }
  return 0;
}
