提出 #63534304


ソースコード 拡げる

#include <iostream>
#include <vector>
#include <cassert>
using namespace std;
const int B = 30;
struct Instruction {
    int v; int should_flip;
    Instruction(int v, int should_flip): v(v), should_flip(should_flip) {}
};
void solve() {
    int n, m; cin >> n >> m;
    vector<int> x(m), y(m), z(m);
    for (int j = 0; j < m; j++) {
        cin >> x[j] >> y[j] >> z[j];
        x[j]--, y[j]--;
    }

    vector<int> solution(n);
    for (int b = 0; b < B; b++) {
        vector<vector<Instruction>> adj(n);
        for (int j = 0; j < m; j++) {
            int u = x[j];
            int v = y[j];
            bool should_flip = z[j] & (1 << b);
            // cout << u << " " << v << " " << should_flip << endl;
            adj[u].emplace_back(v, should_flip);
            adj[v].emplace_back(u, should_flip);
        }
        // cout << endl;

        vector<int> final_color(n, -1);
        vector<bool> done(n, false);
        auto do_color = [&adj, &done, &final_color](int u, int color, int& zero_count, vector<int>& encountered, auto do_color) -> bool {
            if (done[u]) {
                return final_color[u] == color;
            }
            done[u] = true;

            final_color[u] = color;
            if (color == 0) {
                zero_count++;
            }
            encountered.push_back(u);

            for (auto[v, should_flip]: adj[u]) {
                if (!do_color(v, color ^ should_flip, zero_count, encountered, do_color)) {
                    return false;
                }
            }
            return true;
        };

        for (int u = 0; u < n; u++) {
            if (!done[u]) {
                int zero_count = 0;
                vector<int> encountered;
                bool attempt = do_color(u, 0, zero_count, encountered, do_color);
                if (!attempt) {
                    cout << -1 << endl;
                    return;
                }
                int one_count = encountered.size() - zero_count;
                if (!(zero_count >= one_count)) {
                    for (int to_flip : encountered) {
                        final_color[to_flip] ^= 1;
                    }
                }
            }
        }
        for (int i = 0; i < n; i++) {
            assert(final_color[i] != -1);
            if (final_color[i] == 1) {
                solution[i] += 1 << b;
            }
        }
    }
    for (int i = 0; i < n; i++) {
        cout << solution[i] << (i == n-1 ? '\n' : ' ');
    }
}
int main() {
    solve();
    return 0;
}

提出情報

提出日時
問題 E - Min of Restricted Sum
ユーザ Shisuko
言語 C++ 17 (gcc 12.2)
得点 450
コード長 2613 Byte
結果 AC
実行時間 1487 ms
メモリ 20664 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 450 / 450
結果
AC × 3
AC × 38
セット名 テストケース
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_handmade_00.txt, 01_handmade_01.txt, 01_handmade_02.txt, 01_handmade_03.txt, 01_handmade_04.txt, 01_handmade_05.txt, 01_handmade_06.txt, 01_handmade_07.txt, 01_handmade_08.txt, 01_handmade_09.txt, 02_random_00.txt, 02_random_01.txt, 02_random_02.txt, 02_random_03.txt, 02_random_04.txt, 02_random_05.txt, 02_random_06.txt, 02_random_07.txt, 02_random_08.txt, 02_random_09.txt, 02_random_10.txt, 02_random_11.txt, 02_random_12.txt, 02_random_13.txt, 02_random_14.txt, 02_random_15.txt, 02_random_16.txt, 02_random_17.txt, 02_random_18.txt, 02_random_19.txt, 02_random_20.txt, 02_random_21.txt, 02_random_22.txt, 02_random_23.txt, 02_random_24.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 1 ms 3548 KiB
00_sample_01.txt AC 1 ms 3544 KiB
00_sample_02.txt AC 1 ms 3556 KiB
01_handmade_00.txt AC 1 ms 3480 KiB
01_handmade_01.txt AC 152 ms 9444 KiB
01_handmade_02.txt AC 1 ms 3476 KiB
01_handmade_03.txt AC 4 ms 9524 KiB
01_handmade_04.txt AC 1 ms 3432 KiB
01_handmade_05.txt AC 4 ms 9500 KiB
01_handmade_06.txt AC 152 ms 9504 KiB
01_handmade_07.txt AC 1186 ms 16896 KiB
01_handmade_08.txt AC 1194 ms 16924 KiB
01_handmade_09.txt AC 135 ms 7108 KiB
02_random_00.txt AC 637 ms 13040 KiB
02_random_01.txt AC 771 ms 12856 KiB
02_random_02.txt AC 1167 ms 14724 KiB
02_random_03.txt AC 1487 ms 15584 KiB
02_random_04.txt AC 260 ms 9784 KiB
02_random_05.txt AC 856 ms 13604 KiB
02_random_06.txt AC 816 ms 14324 KiB
02_random_07.txt AC 1437 ms 15008 KiB
02_random_08.txt AC 415 ms 10364 KiB
02_random_09.txt AC 453 ms 11536 KiB
02_random_10.txt AC 58 ms 7140 KiB
02_random_11.txt AC 543 ms 11796 KiB
02_random_12.txt AC 66 ms 8176 KiB
02_random_13.txt AC 84 ms 14944 KiB
02_random_14.txt AC 48 ms 8344 KiB
02_random_15.txt AC 99 ms 13380 KiB
02_random_16.txt AC 68 ms 8632 KiB
02_random_17.txt AC 93 ms 14772 KiB
02_random_18.txt AC 370 ms 10252 KiB
02_random_19.txt AC 1288 ms 15384 KiB
02_random_20.txt AC 100 ms 6260 KiB
02_random_21.txt AC 833 ms 20664 KiB
02_random_22.txt AC 359 ms 8512 KiB
02_random_23.txt AC 750 ms 12172 KiB
02_random_24.txt AC 121 ms 7460 KiB