#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int mark[maxn], mark2[maxn], mark3[maxn], h[maxn];
double arr[maxn], ans[maxn];
vector<pair<int, int> > yal[maxn];
vector<int> vec, v2;
map<pair<int, int>, int> mp;
int ted = 0, flag = 0;
double x = 0.0;
int dfs(int now, int par, int d) {
  mark[now] = 1;
  h[now] = d;
  v2.push_back(now);
  ted++;
  for (int i = 0; i < yal[now].size(); i++) {
    pair<int, int> next = yal[now][i];
    if (next.first == par) continue;
    if (!mark[next.first]) {
      arr[next.first] = next.second - arr[now];
      int ret = dfs(next.first, now, d + 1);
      if (ret) return ret;
    } else {
      if ((h[now] - h[next.first] + 1) % 2 == 0) {
        if (arr[now] + arr[next.first] == next.second) continue;
        return 1;
      } else {
        double y = (1.0 * (arr[now] + arr[next.first] - next.second)) / 2;
        if (h[now] % 2 == 0) y *= -1;
        if (!flag) {
          x = y;
          flag = 1;
          continue;
        }
        if (x != y) return 1;
      }
    }
  }
  return 0;
}
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0), cout.tie(0);
  int n, m;
  cin >> n >> m;
  int f = 1;
  for (int i = 1; i <= m; i++) {
    int u, v, w;
    cin >> u >> v >> w;
    if (!mp[pair<int, int>(u, v)]) {
      mp[pair<int, int>(u, v)] = w;
      mp[pair<int, int>(v, u)] = w;
      yal[u].push_back(pair<int, int>(v, w));
      yal[v].push_back(pair<int, int>(u, w));
      continue;
    }
    if (mp[pair<int, int>(u, v)] != w) f = 0;
  }
  if (!f) {
    cout << "NO" << endl;
    return 0;
  }
  for (int i = 1; i <= n; i++) {
    if (!yal[i].size()) mark[i] = 1;
    if (mark[i]) continue;
    int ret = dfs(i, 0, 0);
    if (ret) {
      cout << "NO" << endl;
      return 0;
    }
    if (!flag) {
      for (int i = 0; i < ted; i++) {
        int t = v2[i];
        if (h[t] % 2)
          vec.push_back(arr[t]);
        else
          vec.push_back(-arr[t]);
      }
      sort(vec.begin(), vec.end());
      x = vec[ted / 2];
    }
    for (int i = 0; i < ted; i++) {
      int t = v2[i];
      if (h[t] % 2)
        ans[t] = arr[t] - x;
      else
        ans[t] = arr[t] + x;
    }
    ted = 0;
    x = 0.0;
    flag = 0;
    vec.clear();
    v2.clear();
  }
  cout << "YES" << endl;
  for (int i = 1; i <= n; i++) cout << ans[i] << ' ';
  cout << endl;
  return 0;
}
