Submission #83273

# Submission time Handle Problem Language Result Execution time Memory
83273 2018-11-06T13:06:34 Z teomrn Pipes (BOI13_pipes) C++14
35 / 100
312 ms 22784 KB
#include <bits/stdc++.h>
using namespace std;

typedef long long i64;
const int NMAX = 100010;

vector <pair <int, int>> adia[NMAX + 10];
int tata[NMAX + 10];
int taken[NMAX + 10];
int h[NMAX + 10];
bool activ[NMAX + 10];
bool ok = 1;
i64 ce_s_vrea[NMAX + 10];
int ans[5 * NMAX + 10];

vector <vector <int>> centers;

bool dfs(int nod, bool did)
{
    activ[nod] = 1;
    for (auto i : adia[nod]) {
        if (i.first == tata[nod])
            continue;
        if (tata[i.first] != 0) {
            if (h[i.first] > h[nod])
                continue;
            assert(activ[i.first]);
            if (did) {
                cout << 0;
                exit(0);
                return 1;
            }
            vector <int> c;
            for (int j = nod; j != tata[i.first]; j = tata[j]) {
                if (j == -1)
                    while (1);
                if (taken[j]) {
                    cout << 0;
                    exit(0);
                    return 1;
                }
                taken[j] = 1;
                c.push_back(j);
            }
            centers.push_back(c);
            did = 1;
        }
        else {
            tata[i.first] = nod;
            h[i.first] = 1 + h[nod];
            did |= dfs(i.first, did);
            if (!ok) {
                cout << 0;
                exit(0);
                return 1;
            }
        }
    }
    activ[nod] = 0;
    return did;
}

int solve_arb(int nod, int tata)
{
    int ce_tata;
    for (auto i : adia[nod]) {
        if (i.first != tata) {
            ans[i.second] = solve_arb(i.first, nod);
            ce_s_vrea[nod] -= ans[i.second];
        }
    }
    return ce_s_vrea[nod];
}

void solve_ciclu(vector <int> ciclu)
{
    vector <int> a(ciclu.size());
    vector <i64> s_st(ciclu.size()), s_dr(ciclu.size());

    int n = ciclu.size();

    if (n % 2 == 0) {
        ok = 0;
        return;
    }

    for (int i = 0; i < n; i++) {
        for (auto j : adia[ciclu[i]]) {
            if (j.first != ciclu[(i + 1) % n] && j.first != ciclu[(i + n - 1) % n]) {
                int x = solve_arb(j.first, ciclu[i]);
                ce_s_vrea[ciclu[i]] -= x;
                ans[j.second] = x;
            }
            else if (j.first == ciclu[(i + n - 1) % n])
                a[i] = j.second;
        }
    }
    i64 s_total = 0;
    for (auto i : ciclu)
        s_total += ce_s_vrea[i];

    if ((s_total & 1LL) || (s_total && n == 1)) {
        ok = 0;
        return;
    }

    s_st[0] = ce_s_vrea[ciclu[0]];
    for (int i = 1; i < n; i++)
        s_st[i] = ce_s_vrea[ciclu[i]] - s_st[i - 1];
    s_dr[n - 1] = ce_s_vrea[ciclu[n - 1]];
    for (int i = n - 2; i >= 0; i--)
        s_dr[i] = ce_s_vrea[ciclu[i]] - s_dr[i + 1];

    for (int i = 0; i < n; i++)
        ans[a[i]] = (s_st[i] + s_dr[i] - ce_s_vrea[ciclu[i]]) / 2;
}

int main()
{
    //cout << 0;
    //return 0;
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n, m, a, b;

    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        cin >> ce_s_vrea[i];

    for (int i = 1; i <= m; i++) {
        cin >> a >> b;
        adia[a].push_back({ b, i });
        adia[b].push_back({ a, i });
    }

    for (int i = 1; i <= n; i++) {
        if (!tata[i]) {
            tata[i] = -1;
            auto x = dfs(i, 0);
            if (!x)
            centers.push_back({ i });
        }
    }

    return 0;

    if (!ok) {
        cout << 0 << '\n';
        return 0;
    }

    for (auto i : centers)
        solve_ciclu(i);

    if (!ok) {
        cout << 0 << '\n';
        return 0;
    }

    for (int i = 1; i <= m; i++)
        cout << 2LL * ans[i] << '\n';

    return 0;
}

Compilation message

pipes.cpp: In function 'int solve_arb(int, int)':
pipes.cpp:65:9: warning: unused variable 'ce_tata' [-Wunused-variable]
     int ce_tata;
         ^~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 2680 KB Output isn't correct
2 Incorrect 4 ms 2680 KB Output isn't correct
3 Incorrect 4 ms 2848 KB Output isn't correct
4 Incorrect 58 ms 8868 KB Output isn't correct
5 Incorrect 4 ms 8868 KB Output isn't correct
6 Incorrect 4 ms 8868 KB Output isn't correct
7 Incorrect 4 ms 8868 KB Output isn't correct
8 Incorrect 4 ms 8868 KB Output isn't correct
9 Incorrect 4 ms 8868 KB Output isn't correct
10 Incorrect 4 ms 8868 KB Output isn't correct
11 Incorrect 4 ms 8868 KB Output isn't correct
12 Incorrect 4 ms 8868 KB Output isn't correct
13 Incorrect 50 ms 8868 KB Output isn't correct
14 Incorrect 59 ms 8912 KB Output isn't correct
15 Incorrect 65 ms 9060 KB Output isn't correct
16 Incorrect 49 ms 9060 KB Output isn't correct
17 Incorrect 95 ms 9188 KB Output isn't correct
18 Incorrect 69 ms 9188 KB Output isn't correct
19 Incorrect 73 ms 15460 KB Output isn't correct
20 Incorrect 4 ms 15460 KB Output isn't correct
21 Incorrect 4 ms 15460 KB Output isn't correct
22 Incorrect 70 ms 15460 KB Output isn't correct
23 Incorrect 52 ms 15460 KB Output isn't correct
24 Incorrect 61 ms 15460 KB Output isn't correct
25 Incorrect 50 ms 15460 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 15460 KB Output isn't correct
2 Incorrect 4 ms 15460 KB Output isn't correct
3 Incorrect 70 ms 15616 KB Output isn't correct
4 Correct 77 ms 20224 KB Output is correct
5 Correct 66 ms 20224 KB Output is correct
6 Correct 249 ms 20224 KB Output is correct
7 Incorrect 5 ms 20224 KB Output isn't correct
8 Incorrect 4 ms 20224 KB Output isn't correct
9 Incorrect 4 ms 20224 KB Output isn't correct
10 Correct 4 ms 20224 KB Output is correct
11 Correct 4 ms 20224 KB Output is correct
12 Correct 4 ms 20224 KB Output is correct
13 Correct 4 ms 20224 KB Output is correct
14 Incorrect 4 ms 20224 KB Output isn't correct
15 Incorrect 4 ms 20224 KB Output isn't correct
16 Incorrect 4 ms 20224 KB Output isn't correct
17 Incorrect 5 ms 20224 KB Output isn't correct
18 Correct 4 ms 20224 KB Output is correct
19 Correct 4 ms 20224 KB Output is correct
20 Correct 5 ms 20224 KB Output is correct
21 Correct 5 ms 20224 KB Output is correct
22 Incorrect 4 ms 20224 KB Output isn't correct
23 Incorrect 64 ms 20224 KB Output isn't correct
24 Incorrect 77 ms 20224 KB Output isn't correct
25 Incorrect 75 ms 20224 KB Output isn't correct
26 Correct 80 ms 20224 KB Output is correct
27 Correct 75 ms 20224 KB Output is correct
28 Correct 53 ms 20224 KB Output is correct
29 Correct 192 ms 20224 KB Output is correct
30 Incorrect 91 ms 21628 KB Output isn't correct
31 Incorrect 87 ms 22136 KB Output isn't correct
32 Incorrect 67 ms 22136 KB Output isn't correct
33 Incorrect 90 ms 22136 KB Output isn't correct
34 Correct 79 ms 22136 KB Output is correct
35 Correct 91 ms 22136 KB Output is correct
36 Correct 65 ms 22136 KB Output is correct
37 Correct 312 ms 22136 KB Output is correct
38 Incorrect 94 ms 22136 KB Output isn't correct
39 Incorrect 70 ms 22136 KB Output isn't correct
40 Incorrect 90 ms 22136 KB Output isn't correct
41 Incorrect 107 ms 22136 KB Output isn't correct
42 Correct 89 ms 22136 KB Output is correct
43 Correct 89 ms 22136 KB Output is correct
44 Correct 51 ms 22136 KB Output is correct
45 Correct 170 ms 22136 KB Output is correct
46 Incorrect 87 ms 22784 KB Output isn't correct
47 Incorrect 74 ms 22784 KB Output isn't correct
48 Incorrect 91 ms 22784 KB Output isn't correct
49 Incorrect 65 ms 22784 KB Output isn't correct
50 Correct 106 ms 22784 KB Output is correct
51 Correct 83 ms 22784 KB Output is correct
52 Correct 57 ms 22784 KB Output is correct
53 Correct 190 ms 22784 KB Output is correct
54 Incorrect 87 ms 22784 KB Output isn't correct