Submission #342920

# Submission time Handle Problem Language Result Execution time Memory
342920 2021-01-03T08:24:33 Z mjhmjh1104 Graph (BOI20_graph) C++14
0 / 100
2 ms 2668 KB
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

int n, m;
int a[100006], c[100006];
bool visited[100006];
vector<pair<int, int>> adj[100006];
vector<double> v;

void dfs(int x, int prev = -1) {
    visited[x] = true;
    for (auto &i: adj[x]) if (i.first != prev) {
        if (!visited[i.first]) {
            a[i.first] = -a[x];
            c[i.first] = i.second - c[x];
            dfs(i.first, x);
        } else {
            if (a[i.first] + a[x] == 0) {
                if (c[i.first] + c[x] != i.second) {
                    puts("NO");
                    exit(0);
                }
            } else v.push_back((double)(i.second - c[i.first] - c[x]) / (a[i.first] + a[x]));
        }
    }
}

double f(double x) {
    double res = 0;
    for (int i = 0; i < n; i++) res += abs(a[i] * x + c[i]);
    return res;
}

int main() {
    scanf("%d%d", &n, &m);
    while (m--) {
        int u, v, c;
        scanf("%d%d%d", &u, &v, &c);
        u--, v--;
        adj[u].push_back({ v, c });
        adj[v].push_back({ u, c });
    }
    a[0] = 1, c[0] = 0;
    dfs(0);
    if (v.empty()) {
        puts("YES");
        double l = -2000, r = 2000;
        while (r - l > 0.000000001) {
            double p = (l + l + r) / 3;
            double q = (l + r + r) / 3;
            if (f(p) < f(q)) r = q;
            else l = p;
        }
        for (int i = 0; i < n; i++) printf("%.10f ", a[i] * l + c[i]);
    } else {
        sort(v.begin(), v.end());
        v.erase(unique(v.begin(), v.end()), v.end());
        if (v.size() != 1) puts("NO");
        else {
            puts("YES");
            for (int i = 0; i < n; i++) printf("%.10f ", a[i] * v[0] + c[i]);
        }
    }
}

Compilation message

Graph.cpp: In function 'int main()':
Graph.cpp:37:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   37 |     scanf("%d%d", &n, &m);
      |     ~~~~~^~~~~~~~~~~~~~~~
Graph.cpp:40:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   40 |         scanf("%d%d%d", &u, &v, &c);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2668 KB answer = YES
2 Correct 2 ms 2668 KB answer = YES
3 Correct 2 ms 2668 KB answer = YES
4 Correct 2 ms 2668 KB answer = NO
5 Incorrect 2 ms 2668 KB Sum of endpoints for edge (5; 3) differs from the expected value 2.
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2668 KB answer = YES
2 Correct 2 ms 2668 KB answer = YES
3 Correct 2 ms 2668 KB answer = YES
4 Correct 2 ms 2668 KB answer = NO
5 Incorrect 2 ms 2668 KB Sum of endpoints for edge (5; 3) differs from the expected value 2.
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2668 KB answer = YES
2 Correct 2 ms 2668 KB answer = YES
3 Correct 2 ms 2668 KB answer = YES
4 Correct 2 ms 2668 KB answer = NO
5 Incorrect 2 ms 2668 KB Sum of endpoints for edge (5; 3) differs from the expected value 2.
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2668 KB answer = YES
2 Correct 2 ms 2668 KB answer = YES
3 Correct 2 ms 2668 KB answer = YES
4 Correct 2 ms 2668 KB answer = NO
5 Incorrect 2 ms 2668 KB Sum of endpoints for edge (5; 3) differs from the expected value 2.
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2668 KB answer = YES
2 Correct 2 ms 2668 KB answer = YES
3 Correct 2 ms 2668 KB answer = YES
4 Correct 2 ms 2668 KB answer = NO
5 Incorrect 2 ms 2668 KB Sum of endpoints for edge (5; 3) differs from the expected value 2.
6 Halted 0 ms 0 KB -