QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#346794#3855. Regional developmentKirill22#RE 0ms0kbC++232.7kb2024-03-08 23:46:102024-03-08 23:46:10

Judging History

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

  • [2024-03-08 23:46:10]
  • 评测
  • 测评结果:RE
  • 用时:0ms
  • 内存:0kb
  • [2024-03-08 23:46:10]
  • 提交

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<array<int, 3>> usd;
            function<void(int, int, int)> dfs = [&] (int v, int pr, int d) {
                if (!usd.insert({v, pr, d}).second) {
                    return;
                }
                if (find) {
                    return;
                }
                if (tmp[v] < 0 && d == 1) {
                    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 (d == 0 && c[i] > 0) {
                            stk.push_back(i);
                            dfs(u, i, d ^ 1);
                            stk.pop_back();
                        } else if (d == 1 && c[i] < 0) {
                            stk.push_back(i);
                            dfs(u, i, d ^ 1);
                            stk.pop_back();
                        }
                    } else {
                        if (d == 0 && c[i] < 0) {
                            stk.push_back(i);
                            dfs(u, i, d ^ 1);
                            stk.pop_back();
                        } else if (d == 1 && c[i] > 0) {
                            stk.push_back(i);
                            dfs(u, i, d ^ 1);
                            stk.pop_back();
                        }
                    }
                }
            };
            dfs(v, -1, 0);
            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 < m; i++) {
        assert(c[i] != 0 && -mod < c[i] && c[i] < mod - 1);
        cout << c[i] << '\n';
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Runtime Error

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:


result: