Submission #83350

# Submission time Handle Problem Language Result Execution time Memory
83350 2018-11-07T09:10:13 Z teomrn Pipes (BOI13_pipes) C++14
30 / 100
1000 ms 31408 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;

void Prost()
{
    while (1);
}

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;
            if (did)
                Prost();
            vector <int> c;
            for (int j = nod; j != tata[i.first]; j = tata[j]) {
                if (taken[j])
                    Prost();
                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)
                Prost();
        }
    }
    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)
        Prost();

    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))
        Prost();

    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()
{
    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 });
        }
    }

    if (!ok)
        Prost();

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

    if (!ok)
        Prost();

    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:58:9: warning: unused variable 'ce_tata' [-Wunused-variable]
     int ce_tata;
         ^~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 4 ms 2680 KB Output is correct
2 Correct 4 ms 2820 KB Output is correct
3 Correct 4 ms 2856 KB Output is correct
4 Correct 89 ms 10448 KB Output is correct
5 Correct 4 ms 10448 KB Output is correct
6 Correct 4 ms 10448 KB Output is correct
7 Correct 4 ms 10448 KB Output is correct
8 Correct 4 ms 10448 KB Output is correct
9 Correct 4 ms 10448 KB Output is correct
10 Correct 5 ms 10448 KB Output is correct
11 Correct 5 ms 10448 KB Output is correct
12 Correct 5 ms 10448 KB Output is correct
13 Correct 72 ms 10516 KB Output is correct
14 Correct 84 ms 12924 KB Output is correct
15 Correct 96 ms 14916 KB Output is correct
16 Correct 86 ms 15300 KB Output is correct
17 Correct 88 ms 16972 KB Output is correct
18 Correct 84 ms 17012 KB Output is correct
19 Correct 102 ms 23284 KB Output is correct
20 Correct 4 ms 23284 KB Output is correct
21 Correct 4 ms 23284 KB Output is correct
22 Correct 84 ms 23284 KB Output is correct
23 Correct 76 ms 23284 KB Output is correct
24 Correct 84 ms 23284 KB Output is correct
25 Correct 69 ms 23284 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 23284 KB Output isn't correct
2 Incorrect 5 ms 23284 KB Output isn't correct
3 Execution timed out 1061 ms 23596 KB Time limit exceeded
4 Execution timed out 1068 ms 27152 KB Time limit exceeded
5 Execution timed out 1073 ms 27152 KB Time limit exceeded
6 Execution timed out 1083 ms 27152 KB Time limit exceeded
7 Incorrect 4 ms 27152 KB Output isn't correct
8 Incorrect 4 ms 27152 KB Output isn't correct
9 Execution timed out 1080 ms 27152 KB Time limit exceeded
10 Execution timed out 1082 ms 27152 KB Time limit exceeded
11 Execution timed out 1079 ms 27152 KB Time limit exceeded
12 Execution timed out 1079 ms 27152 KB Time limit exceeded
13 Execution timed out 1080 ms 27152 KB Time limit exceeded
14 Incorrect 4 ms 27152 KB Output isn't correct
15 Incorrect 5 ms 27152 KB Output isn't correct
16 Incorrect 5 ms 27152 KB Output isn't correct
17 Execution timed out 1078 ms 27152 KB Time limit exceeded
18 Execution timed out 1073 ms 27152 KB Time limit exceeded
19 Execution timed out 1084 ms 27152 KB Time limit exceeded
20 Execution timed out 1075 ms 27152 KB Time limit exceeded
21 Execution timed out 1076 ms 27152 KB Time limit exceeded
22 Incorrect 5 ms 27152 KB Output isn't correct
23 Incorrect 72 ms 27152 KB Output isn't correct
24 Incorrect 101 ms 27152 KB Output isn't correct
25 Execution timed out 1066 ms 27152 KB Time limit exceeded
26 Execution timed out 1085 ms 27152 KB Time limit exceeded
27 Execution timed out 1080 ms 27152 KB Time limit exceeded
28 Execution timed out 1082 ms 27152 KB Time limit exceeded
29 Execution timed out 1079 ms 27152 KB Time limit exceeded
30 Incorrect 104 ms 30040 KB Output isn't correct
31 Incorrect 114 ms 31408 KB Output isn't correct
32 Incorrect 77 ms 31408 KB Output isn't correct
33 Execution timed out 1070 ms 31408 KB Time limit exceeded
34 Execution timed out 1084 ms 31408 KB Time limit exceeded
35 Execution timed out 1086 ms 31408 KB Time limit exceeded
36 Execution timed out 1079 ms 31408 KB Time limit exceeded
37 Execution timed out 1079 ms 31408 KB Time limit exceeded
38 Incorrect 116 ms 31408 KB Output isn't correct
39 Incorrect 90 ms 31408 KB Output isn't correct
40 Incorrect 104 ms 31408 KB Output isn't correct
41 Execution timed out 1078 ms 31408 KB Time limit exceeded
42 Execution timed out 1073 ms 31408 KB Time limit exceeded
43 Execution timed out 1077 ms 31408 KB Time limit exceeded
44 Execution timed out 1086 ms 31408 KB Time limit exceeded
45 Execution timed out 1084 ms 31408 KB Time limit exceeded
46 Incorrect 117 ms 31408 KB Output isn't correct
47 Incorrect 105 ms 31408 KB Output isn't correct
48 Incorrect 116 ms 31408 KB Output isn't correct
49 Execution timed out 1085 ms 31408 KB Time limit exceeded
50 Execution timed out 1087 ms 31408 KB Time limit exceeded
51 Execution timed out 1086 ms 31408 KB Time limit exceeded
52 Execution timed out 1077 ms 31408 KB Time limit exceeded
53 Execution timed out 1083 ms 31408 KB Time limit exceeded
54 Incorrect 105 ms 31408 KB Output isn't correct