Submission #973810

#TimeUsernameProblemLanguageResultExecution timeMemory
973810NotLinuxGraph (BOI20_graph)C++17
0 / 100
2 ms4188 KiB
//author : FatihCihan #include <bits/stdc++.h> using namespace std; #define all(v) v.begin() , v.end() #define sz(a) (int)a.size() #define int long long #define double long double const int N = 1e5 + 7; const int inf = 1e9 + 7; const double EPS = 0.0000001; const double INF = 1e9 + 7; int n,m; vector < pair < int , int > > graph[N]; pair < int , int > mem[N];//ax + b void solve(){ cin >> n >> m; for(int i = 0;i<=n;i++)mem[i] = {inf , inf}; for(int i = 0;i<m;i++){ int a,b,c; cin >> a >> b >> c; graph[a].push_back({b , c}); graph[b].push_back({a , c}); } queue < pair < int , pair < int , int > > > q; q.push({1 , {1 , 0}}); set < double > possible; while(sz(q)){ int node = q.front().first; pair < int , int > eq = q.front().second; q.pop(); if(mem[node] != pair < int , int >{inf , inf}){// check whether it matches or not if(mem[node].first == eq.first and mem[node].second != eq.second){ cout << "NO" << endl; return; } else if(mem[node].first == eq.first){ 37; } else{ possible.insert((double)(mem[node].second - eq.second) / (double)(eq.first - mem[node].first)); } } else{ mem[node] = eq; // cout << node << " : " << eq.first << " , " << eq.second << endl;; for(auto itr : graph[node]){ q.push({itr.first , {-eq.first , itr.second - eq.second}}); } } } // cout << "possible : ";for(auto itr : possible)cout << itr << " ";cout << endl; auto answer = [&](double x){ cout << "YES" << endl; for(int i = 1;i<=n;i++){ cout << fixed << setprecision(6) << (double)mem[i].first * x + (double)mem[i].second << ' '; } cout << endl; }; if(sz(possible) > 1){ cout << "NO" << endl; return; } else if(sz(possible) == 1){ // double ret = 0 , x = *possible.begin(); // for(int i = 1;i<=n;i++){ // ret += abs((double)mem[i].first * x + (double)mem[i].second); // } // cout << ret << endl; answer(*possible.begin()); } else{ // binary search ? auto check = [&](double x){ double ret = 0; for(int i = 1;i<=n;i++){ ret += abs((double)mem[i].first * x + (double)mem[i].second); } return ret; }; double l = 0 , r = INF; while(abs(l - r) > EPS){ double mid = (l + r) / 2; if(check(mid) < check(mid + EPS)){ r = mid; } else{ l = mid + EPS; } } // cout << check(l) << endl; answer(l); } } signed main(){ ios_base::sync_with_stdio(0);cin.tie(0); int testcase = 1;//cin >> testcase; while(testcase--)solve(); cerr << 1000.0 * clock() / CLOCKS_PER_SEC << " ms" << endl; }

Compilation message (stderr)

Graph.cpp: In function 'void solve()':
Graph.cpp:37:5: warning: statement has no effect [-Wunused-value]
   37 |     37;
      |     ^~
#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...