QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#346799#3855. Regional developmentKirill22#TL 2012ms5888kbC++232.3kb2024-03-08 23:52:322024-03-08 23:52:32

Judging History

你现在查看的是最新测评结果

  • [2024-03-08 23:52:32]
  • 评测
  • 测评结果:TL
  • 用时:2012ms
  • 内存:5888kb
  • [2024-03-08 23:52:32]
  • 提交

answer

#include "bits/stdc++.h"

using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n, m, mod;
    cin >> n >> m >> mod;
    vector<int> a(m), b(m), c(m), tmp(n);
    vector<vector<int>> g(n);
    for (int i = 0; i < m; i++) {
        cin >> a[i] >> b[i] >> c[i];
        a[i]--, b[i]--;
        tmp[a[i]] += c[i];
        tmp[b[i]] -= c[i];
        g[a[i]].push_back(i);
        g[b[i]].push_back(i);
    }
    for (int v = 0; v < n; v++) {
        while (tmp[v] > 0) {
            bool find = false;
            vector<int> stk, res;
            set<pair<int, int>> usd;
            function<void(int, int)> dfs = [&] (int v, int pr) {
                if (!usd.insert({v, pr}).second) {
                    return;
                }
                if (find) {
                    return;
                }
                if (tmp[v] < 0) {
                    find = true;
                    res = stk;
                    return;
                }
                for (auto i : g[v]) {
                    if (i == pr) {
                        continue;
                    }
                    int u = a[i] ^ b[i] ^ v;
                    if (v == a[i]) {
                        if (c[i] > 0) {
                            stk.push_back(i);
                            dfs(u, i);
                            stk.pop_back();
                        }
                    } else {
                        if (c[i] < 0) {
                            stk.push_back(i);
                            dfs(u, i);
                            stk.pop_back();
                        }
                    }
                }
            };
            dfs(v, -1);
            for (auto i : res) {
                tmp[a[i]] -= c[i];
                tmp[b[i]] += c[i];
                if (c[i] > 0) {
                    c[i] = c[i] - mod;
                } else {
                    c[i] = c[i] + mod;
                }
                tmp[a[i]] += c[i];
                tmp[b[i]] -= c[i];
            }
        }
    }
    for (int i = 0; i < n; i++) {
        assert(tmp[i] == 0);
    }
    for (int i = 0; i < m; i++) {
        assert(c[i] != 0 && -mod < c[i] && c[i] < mod);
        cout << c[i] << '\n';
    }
}

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 3540kb

input:

10 23 3
2 10 1
2 6 1
6 9 1
7 9 1
6 7 1
3 6 1
1 3 1
1 6 2
6 10 1
2 9 1
4 9 2
4 7 2
3 10 2
3 9 1
6 8 1
7 8 2
3 5 1
5 9 1
8 9 2
3 8 2
1 5 2
1 4 1
5 10 2

output:

-2
1
1
1
1
1
-2
2
1
1
-1
-1
-1
-2
1
-1
-2
-2
2
2
2
-2
2

result:

ok correct plan

Test #2:

score: 0
Accepted
time: 30ms
memory: 4028kb

input:

100 1297 11
27 34 5
7 34 6
7 90 3
80 90 6
37 80 6
37 48 5
47 48 6
47 86 5
56 86 6
56 84 5
63 84 6
38 63 6
66 91 8
12 91 6
12 15 5
15 22 1
22 87 5
46 87 6
46 63 10
63 87 8
71 87 6
65 71 6
38 65 1
38 67 4
29 67 6
9 29 6
9 21 5
16 21 6
16 89 2
89 98 5
4 98 6
4 13 4
13 33 5
14 33 6
14 66 10
66 86 10
57 ...

output:

5
6
3
6
6
-6
6
-6
-5
-6
6
6
8
-5
5
1
-6
6
-1
-3
6
-5
-10
-7
6
6
-6
6
-9
5
-5
4
5
-5
10
10
6
6
-6
7
-5
6
8
-6
6
-6
5
-5
6
5
-5
5
-5
-10
-5
3
5
6
-6
-6
6
8
9
-5
-3
5
-5
5
-6
6
-5
5
6
6
5
-5
-6
6
-5
5
-5
5
-1
6
-4
-6
-6
6
7
5
5
6
-5
5
-6
6
6
-5
-6
-6
10
-6
5
6
-5
-6
-6
-4
6
-5
5
-6
8
-6
-5
5
5
-6
-6
-5...

result:

ok correct plan

Test #3:

score: 0
Accepted
time: 39ms
memory: 4072kb

input:

100 1272 18
39 40 14
39 95 4
21 95 14
12 21 14
12 82 16
28 82 14
17 28 14
17 67 5
35 67 14
11 35 1
11 67 15
17 58 4
58 80 4
28 80 14
28 77 3
25 77 10
22 25 14
22 54 4
13 54 14
13 99 4
86 99 14
86 89 16
21 89 14
21 62 4
16 62 14
16 81 4
76 81 14
56 76 1
28 56 14
28 47 4
19 47 14
19 91 4
22 91 14
13 2...

output:

-4
4
-4
14
-2
14
14
-13
-4
-17
15
-14
-14
14
3
-8
14
-14
-4
4
-4
16
-4
4
-4
4
14
1
14
4
-4
4
-4
14
-14
-14
14
-4
4
-14
13
-14
2
14
-14
4
-4
4
17
14
4
-14
14
-9
14
-14
14
-4
-1
4
4
14
-14
4
4
-4
-4
4
4
14
-4
-14
-16
4
-9
4
-14
-4
10
4
-14
-4
1
-4
-7
-4
4
-4
-8
4
-10
-14
14
-8
14
-4
-14
14
-14
-4
4
4
...

result:

ok correct plan

Test #4:

score: 0
Accepted
time: 59ms
memory: 4096kb

input:

100 1350 3
22 75 2
22 50 2
22 35 1
25 35 2
42 76 2
39 42 2
36 39 2
14 36 2
14 33 1
33 72 1
54 72 2
54 73 1
5 73 2
45 92 2
23 92 2
23 26 2
26 62 1
6 62 1
22 86 1
24 86 2
7 24 2
7 55 2
20 39 2
20 73 1
27 73 2
27 68 1
24 68 2
24 98 1
8 98 2
8 33 1
3 33 2
1 3 1
3 97 1
83 97 2
83 90 1
38 90 2
38 86 1
21 ...

output:

-1
-1
1
-1
-1
-1
-1
2
1
1
-1
-2
2
2
-1
2
-2
1
1
-1
2
-1
-1
1
-1
-2
2
1
-1
1
-1
-2
1
2
1
-1
-2
-2
-1
-1
1
-2
2
1
1
-2
-1
-2
-1
-1
1
-1
2
-2
-1
-2
1
-2
2
2
1
-2
2
1
-1
1
-1
-1
1
1
-1
-1
-2
2
1
2
1
2
2
-1
2
-2
2
-1
1
1
2
-2
-2
2
-2
-2
2
-2
2
1
-2
-2
1
-1
1
2
1
-2
2
-2
-2
1
1
2
-1
1
1
-2
-1
1
-1
-1
1
-1...

result:

ok correct plan

Test #5:

score: 0
Accepted
time: 2012ms
memory: 5888kb

input:

1000 9780 26
39 260 1
215 260 25
215 483 1
483 801 1
801 977 1
379 977 25
316 379 25
316 732 1
474 732 25
183 474 25
177 183 25
177 788 1
525 788 25
525 909 1
51 909 25
51 565 1
203 565 25
203 353 1
353 655 8
655 814 1
814 999 1
305 999 25
52 305 25
52 978 20
839 978 25
646 839 25
536 646 25
536 571...

output:

-25
25
1
1
-25
25
-1
1
-1
-1
-1
1
-1
1
-1
1
-1
1
8
-25
-25
25
25
-6
25
-1
25
-25
25
-25
25
-25
25
-25
25
25
-25
13
25
1
1
-1
-1
-1
1
1
1
-1
1
-1
1
1
-1
1
-1
1
-1
-1
1
-1
1
-1
-1
1
1
-1
-25
25
1
25
-25
25
-1
-1
1
1
-1
1
-1
-25
25
-25
-1
1
-1
1
-1
15
-1
-1
-1
1
1
-1
-1
1
-1
1
25
-25
-25
-25
-25
-1
-25...

result:

ok correct plan

Test #6:

score: 0
Accepted
time: 1ms
memory: 3560kb

input:

20 190 20
2 7 10
4 7 18
4 19 15
1 19 14
1 2 13
1 13 10
3 13 10
1 3 12
8 10 19
10 12 13
12 16 12
8 16 9
3 19 18
2 19 5
2 17 15
4 17 2
4 5 3
1 5 8
14 19 16
4 14 15
19 20 7
13 20 11
3 20 8
7 9 14
9 13 16
13 16 14
1 16 19
1 14 14
8 14 1
3 8 3
3 9 8
9 17 1
17 19 10
1 20 1
10 20 17
4 10 5
4 6 14
6 19 16
1...

output:

-10
18
15
-6
-7
10
-10
12
19
-7
-8
9
18
-15
-5
2
-17
-12
-4
-5
7
11
8
-6
16
-6
-1
14
-19
3
8
-19
-10
-19
-3
5
14
-4
-7
-3
-16
9
7
13
-10
2
-12
-13
-12
-19
5
17
-4
2
16
13
17
15
-9
-4
17
9
17
-6
-5
-19
3
3
-6
-14
-8
2
-2
-13
19
-19
-8
-5
-10
-10
-1
-11
12
-8
-10
-7
13
11
-8
16
17
9
6
-18
18
2
-3
-6
1...

result:

ok correct plan

Test #7:

score: -100
Time Limit Exceeded

input:

300 9997 94
3 81 59
80 81 43
40 80 43
40 121 51
121 151 51
95 151 47
95 158 59
149 158 43
149 258 51
99 258 43
99 150 51
150 299 51
29 299 43
29 151 5
151 289 51
13 289 43
13 226 51
182 226 30
182 248 51
6 248 17
6 243 51
91 243 43
91 193 51
169 193 43
169 287 51
237 287 43
153 237 31
153 289 51
155...

output:


result: