#include <bits/stdc++.h>
using namespace std;
/*
#pragma GCC optimize("O3")
#include <bitset>
#pragma GCC target("avx2")*/
#define fi first
#define se second
#define int long long
typedef long long ll;
typedef long double ld;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
int inf = 1e15;
vector<vector<int>> g;
map<pair<int, int>, int> mp;
vector<int> val;
int curbest = inf;
int nowsum = 0;
bool dfs(int v, int q) {
val[v] = q;
nowsum += abs(q);
if (nowsum > curbest)
return 0;
for (auto u : g[v]) {
if (val[u] != inf) {
if (val[u] + val[v] != mp[{v, u}])
return 0;
} else {
int res = dfs(u, mp[{v, u}] - val[v]);
if (res == 0)
return 0;
}
}
return 1;
}
vector<int> col;
void dfs_comp(int v, int c) {
col[v] = c;
for (auto u : g[v]) {
if (col[u] == -1) {
dfs_comp(u, c);
}
}
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m;
cin >> n >> m;
g.resize(n);
for (int i = 0; i < m; i++) {
int v, u, w;
cin >> v >> u >> w;
g[v - 1].push_back(u - 1);
g[u - 1].push_back(v - 1);
if (mp.find({v - 1, u - 1}) != mp.end()) {
if (mp[{v - 1, u - 1}] != w * 2) {
cout << "NO" << '\n';
return 0;
}
} else {
mp[{v - 1, u - 1}] = w * 2;
mp[{u - 1, v - 1}] = w * 2;
}
}
col.resize(n, -1);
vector<int> boss;
for (int i = 0; i < n; i++) {
if (col[i] == -1) {
boss.push_back(i);
dfs_comp(i, boss.size() - 1);
}
}
vector<vector<int>> comps(boss.size());
for (int i = 0; i < n; i++) {
comps[col[i]].push_back(i);
}
val.assign(n, inf);
bool done = 1;
int answer = 0;
vector<int> bq(boss.size());
for (int co = 0; co < boss.size(); co++) {
bool ok = 0;
int indb = -1;
curbest = inf;
for (int q = 0; q <= 20; q++) {
nowsum = 0;
for (auto el : comps[co]) {
val[el] = inf;
}
if (dfs(boss[co], q)) {
ok = 1;
if (nowsum < curbest) {
curbest = nowsum;
indb = q;
}
}
nowsum = 0;
for (auto el : comps[co]) {
val[el] = inf;
}
if (dfs(boss[co], -q)) {
ok = 1;
if (nowsum < curbest) {
curbest = nowsum;
indb = -q;
}
}
}
bq[co] = indb;
if (ok == 0) {
done = 0;
break;
}
answer += curbest;
}
if (done == 0) {
cout << "NO" << '\n';
return 0;
} else {
cout << "YES" << '\n';
for (int i = 0; i < n; i++) {
val[i] = inf;
}
curbest = inf;
nowsum = 0;
for (int co = 0; co < boss.size(); co++) {
dfs(boss[co], bq[co]);
}
for (auto el : val) {
cout << el * 0.5 << ' ';
}
cout << '\n';
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |