結果

問題 No.2678 Minmax Independent Set (Hack)
ユーザー 👑 eoeoeoeo
提出日時 2024-03-13 19:59:53
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 67 ms / 2,000 ms
コード長 1,518 bytes
コンパイル時間 2,571 ms
コンパイル使用メモリ 210,852 KB
実行使用メモリ 15,016 KB
最終ジャッジ日時 2024-03-13 20:50:17
合計ジャッジ時間 3,509 ms
ジャッジサーバーID
(参考情報)
judge15 / judge11
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 67 ms
15,016 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>

using namespace std;

int main(int argc, char* argv[]) {
    int N = 199993;
    int L = 39999;  // 列の個数
    vector<vector<int>> G(N + 1);
    int p = 6000;  // 長さ 3 の列が左から何番目か( 中央あたりの偶数列目なら OK )

    for (int i = 1; i < L; i++) {
        G[i].push_back(i + 1);
        G[i + 1].push_back(i);
    }
    int id = L + 1;

    for (int u = 1; u <= L; u++) {
        int now = u;

        // 縦に 3 つ
        if (u == p) {
            G[now].push_back(id);
            G[id].push_back(now);
            id++;
            G[now].push_back(id);
            G[id].push_back(now);
            id++;
        } else {  // 縦に 5 つ
            G[now].push_back(id);
            G[id].push_back(now);
            now = id;
            id++;
            G[now].push_back(id);
            G[id].push_back(now);
            id++;

            now = u;
            G[now].push_back(id);
            G[id].push_back(now);
            now = id;
            id++;
            G[now].push_back(id);
            G[id].push_back(now);
            id++;
        }
    }

    stack<int> S;
    S.push(1);
    vector<int> visited(N + 1, 0);

    cout << N << endl;
    while (!S.empty()) {
        int now = S.top();
        S.pop();
        visited[now] = 1;

        for (int nx : G[now]) {
            if (visited[nx]) continue;
            cout << min(now, nx) << " " << max(now, nx) << "\n";
            S.push(nx);
        }
    }

    return 0;
}
0