제출 #726418

#제출 시각아이디문제언어결과실행 시간메모리
726418YENGOYANGraph (BOI20_graph)C++14
34 / 100
958 ms6164 KiB
    /*
                                        //\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\\
                                        \\                                    //
                                        //  271828___182845__904523__53602__  \\
                                        \\  87___47____13______52____66__24_  //
                                        //  97___75____72______47____09___36  \\
                                        \\  999595_____74______96____69___67  //
                                        //  62___77____24______07____66__30_  \\
                                        \\  35___35____47______59____45713__  //
                                        //                                    \\
                                        \\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\//
    */
    #include <algorithm>
    #include <bitset>
    #include <chrono>
    #include <climits>
    #include <cmath>
    #include <cstdio>
    #include <ctime>
    #include <deque>
    #include <fstream>
    #include <functional>
    #include <iomanip>
    #include <iostream>
    #include <map>
    #include <queue>
    #include <random>
    #include <set>
    #include <stack>
    #include <string>
    #include <tuple>
    #include <unordered_map>
    #include <unordered_set>
    #include <vector>
     
    using namespace std;
    using LL = long long;
    const int N = 1e5 + 5;
    const LL mod = 1e9 + 7, inf = 1e18;
     
    vector<int> dx = { 1, 0, 0, -1, 1, 1, -1, -1 };
    vector<int> dy = { 0, 1, -1, 0, 1, -1, 1, -1 };
     
    void solve() {
      int n, m; cin >> n >> m;
      vector<vector<pair<int, int>>> gp(n);
      for(int i = 0; i < m; ++i){
        int u, v, w; cin >> u >> v >> w; w *= 10;
        gp[--u].push_back({--v, w});
        gp[v].push_back({u, w});
      }
      vector<LL> ans(n, inf), val(n), comp;
      vector<bool> vis;
      LL sm = 0;
      function<void(int)> dfs = [&](int u){
        vis[u] = 1;
        if(sm != inf) {
          sm += abs(val[u]);
        }
        comp.push_back(u);
        for(pair<int, int> &v : gp[u]) {
          if(!vis[v.first]) {
            val[v.first] = v.second - val[u];
            dfs(v.first); 
          }
          else if(val[u] + val[v.first] != v.second) {
             sm = inf;
          }
        }
      };
      vector<double> res(n);
      vector<int> st;
      for(int a = -100; a <= 100; ++a){
        vis = vector<bool> (n);
        val = vector<LL> (n);
        for(int i = 0; i < n; ++i) {
          if(vis[i]) {
            continue;
          }
          if(a == -100) {
            st.push_back(i);
          }
          sm = 0;
          val[i] = a;
          comp.clear();
          dfs(i);
          if(sm < ans[i]) {
            ans[i] = sm;
            for(LL &u : comp) {
              res[u] = val[u];
            }
          }
        }
      }
      for(int &u : st){
        if(ans[u] == inf){ 
          cout << "NO\n";
          return;
        }
      }
      cout << "YES\n";
      for(int i = 0; i < n; ++i) {
        cout << double(res[i] / 10) << " ";
      }
      cout << "\n";
    }
     
    int main() {
      ios_base::sync_with_stdio(false);
      cin.tie(NULL);
     // int t; cin >> t; while(t--)
        solve();
    }
#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...