217872026-01-13 22:10:58szilTrükkcpp17Accepted 60/6045ms1652 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

const ll MOD = 1e9+7;

void solve() {
    int n, m; cin >> n >> m;
    vector<vector<int>> g(n+1);
    for (int i = 0; i < m; i++) {
        int u, v; cin >> u >> v;
        g[u-1].emplace_back(v);
        g[v].emplace_back(u-1);
    }
    vector<int> depth(n+1, -1);
    ll ans = 1;
    auto dfs = [&](auto &&self, int u, int d = 0) -> void {
        depth[u] = d;
        for (int v : g[u]) {
            if (depth[v] == -1) self(self, v, d^1);
            else if (depth[v] == d) ans = 0;
        }
    };
    for (int i = 0; i <= n; i++) {
        if (depth[i] == -1) {
            if (i != 0) {
                ans *= 2;
                ans %= MOD;
            }
            dfs(dfs, i);
        }
    }
    cout << ans << "\n";
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int t = 1; 
    cin >> t;
    while (t--) solve();
    return 0;
}
SubtaskSumTestVerdictTimeMemory
base60/60
1Accepted0/01ms500 KiB
2Accepted0/021ms1076 KiB
3Accepted3/31ms316 KiB
4Accepted3/31ms316 KiB
5Accepted3/31ms316 KiB
6Accepted3/31ms316 KiB
7Accepted2/241ms1588 KiB
8Accepted2/243ms1588 KiB
9Accepted2/243ms1596 KiB
10Accepted2/241ms1492 KiB
11Accepted2/241ms1580 KiB
12Accepted2/241ms1588 KiB
13Accepted2/229ms1296 KiB
14Accepted2/229ms1104 KiB
15Accepted2/230ms1296 KiB
16Accepted2/232ms1360 KiB
17Accepted2/232ms1360 KiB
18Accepted2/230ms1244 KiB
19Accepted2/245ms1652 KiB
20Accepted2/243ms1616 KiB
21Accepted2/243ms1616 KiB
22Accepted2/241ms1468 KiB
23Accepted2/243ms1360 KiB
24Accepted2/243ms1568 KiB
25Accepted2/243ms1484 KiB
26Accepted2/232ms1360 KiB
27Accepted2/243ms1608 KiB
28Accepted2/237ms1360 KiB
29Accepted2/214ms996 KiB
30Accepted2/216ms1164 KiB