92331


[隣接リストを実装しようとした時に heap-buffer-overflow
が発生してしまう](https://ja.stackoverflow.com/questions/92319/%e9%9a%a3%e6%8e%a5%e3%83%aa%e3%82%b9%e3%83%88%e3%82%92%e5%ae%9f%e8%a3%85%e3%81%97%e3%82%88%e3%81%86%e3%81%a8%e3%81%97%e3%81%9f%e6%99%82%e3%81%ab-
heap-buffer-
overflow-%e3%81%8c%e7%99%ba%e7%94%9f%e3%81%97%e3%81%a6%e3%81%97%e3%81%be%e3%81%86)  
こちらのリンクで質問させいていただいた問題の続きなのですが、なぜ本問題においてあるケースにおいてRE(実行時エラー)となってしまうのか、原因が特定できていません。  
わかる方いらっしゃいましたら教えていただけると助かります。  
[追記]  
あるケースと上の文で言っているケースに関してはAtCoderでテストケースが公開されていないため自分でもわかっていません。  
ご指摘くださった方ありがとうございます。

[code]

    #include <bits/stdc++.h>
    
    using namespace std;
    
    void solve() {
        uint64_t N, Q;
        cin >> N >> Q;
        vector<vector<uint64_t>> G(N + 1);
        for (uint64_t i = 0; i < Q; i++) {
            uint64_t T, A, B;
            cin >> T >> A >> B;
            if (T == 1) {
                auto itr = find(G[A].begin(), G[A].end(), B);
                if (itr == G[A].end()) {
                    G[A].push_back(B);
                }
            }
            if (T == 2) {
                auto itr = find(G[A].begin(), G[A].end(), B);
                if (itr != G[A].end()) {
                    G[A].erase(itr);
                }
            }
            if (T == 3) {
                bool AhaveB = false;
                for (uint64_t A_friend: G[A]) {
                    if (A_friend == B) {
                        AhaveB = true;
                    }
                }
                bool BhaveA = false;
                for (uint64_t B_friend: G[B]) {
                    if (B_friend == A) {
                        BhaveA = true;
                    }
                }
                if (AhaveB && BhaveA) {
                    cout << "Yes" << endl;
                } else {
                    cout << "No" << endl;
                }
            }
        }
    }
    
    int main() {
        solve();
    }
    
[/code]

上記のように変更を加えました。  
以下問題です。  
<https://atcoder.jp/contests/abc278/tasks/abc278_c>


CC BY-SA 4.0
2022-11-20T11:45:21.967
92329
2022-11-20T20:47:27.440
2022-11-20T20:47:27.440
55503
55503
question
c++
AtCoderで二次元配列を書いたところ一部の問題においてRE(実行時エラー)となってしまう原因が特定できない。


出題には

> ## 制約
>
> 2≤N≤109

とありました。

>
[code]

>     vector<vector<uint64_t>> G(N + 1);
>  
[/code]

`uint64_t`は8バイトなので`G`は109 x 8 = 8GB 消費することになります。これはメモリ上限を超えているのではないでしょうか？


CC BY-SA 4.0
2022-11-20T13:06:27.847
92331
2022-11-20T13:06:27.847
4236
92329
answer