Submission #1303444

#TimeUsernameProblemLanguageResultExecution timeMemory
1303444BuiDucManh123Graph (BOI20_graph)C++20
0 / 100
1 ms340 KiB
#include <bits/stdc++.h> #define TN "" using namespace std; mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count()); const double inf = 1e9; const double EPS = 1e-9; double ans[200009]; bool vis[100009]; vector<pair<int, int>> g[100009]; bool e(double x, double y){ return fabs(x - y) <= EPS; } bool solve(int u, double x){ vis[u] = 1; ans[u] = x; for(pair<int, int> v : g[u]){ if(vis[v.first]){ if(v.second == 1){ if(!e(ans[v.first] + x, 1.0)){ return 0; } } if(v.second == 2){ if(!e(ans[v.first] + x, 2.0)){ return 0; } } continue; } if(v.second == 1){ if(!solve(v.first, (double)(1.0 - x))) return 0; }else{ if(!solve(v.first, (double)(2.0 - x))) return 0; } } return 1; } void reset(int u){ vis[u] = 0; for(pair<int, int> v : g[u]){ if(!vis[v.first]) continue; reset(v.first); } } double cal(int u){ double res = ans[u]; vis[u] = 1; for(pair<int, int> v : g[u]){ if(vis[v.first]) continue; res += cal(v.first); } return res; } void Solve(){ int n, m; cin >> n >> m; for(int i = 1; i <= m; i++){ int u, v, c; cin >> u >> v >> c; g[u].push_back({v, c}); g[v].push_back({u, c}); } vector<double> val = {-2, -1.5, -1.0, -0.5, 0, 0.5, 1, 1.5, 2}; for(int i = 1; i <= n; i++){ if(vis[i]) continue; double now = inf; double pos = inf; for(double x : val){ bool siu = solve(i, x); reset(i); if(!siu){ continue; } double cur = cal(i); reset(i); if(now > cur){ now = cur; pos = x; } } if(pos == inf){ cout << "NO"; return; } solve(i, pos); } cout << "YES\n"; cout << fixed << setprecision(8); for(int i = 1; i <= n; i++){ cout << ans[i] << " "; } } signed main() { if(fopen(TN".inp", "r")){ freopen(TN".inp", "r", stdin); freopen(TN".out", "w", stdout); } ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int test = 1; //cin >> test; while(test--){ Solve(); } return 0; }

Compilation message (stderr)

Graph.cpp: In function 'int main()':
Graph.cpp:96:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   96 |         freopen(TN".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
Graph.cpp:97:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   97 |         freopen(TN".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...