213222026-01-12 18:26:59algoproTrükkcpp17Accepted 60/6035ms2236 KiB
// UUID: eb3fdeb3-71fd-4618-a17b-8dadf5f59bee
#include <bits/stdc++.h>
using namespace std;

const int mod = 1e9 + 7;

vector<vector<int>> edges;
vector<int> col;
bool c, z;

void dfs(int node) {
    if (!node) z = true;
    for (int x : edges[node]) {
        if (!col[x]) {
            col[x] = 3 - col[node];
            dfs(x);
        }
        if (col[x] == col[node]) c = true;
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    int t;
    cin >> t;
    while (t--) {
        int n, k;
        cin >> n >> k;
        edges.assign(n + 1, {});
        col.assign(n + 1, 0);
        while (k--) {
            int u, v;
            cin >> u >> v;
            u--;
            edges[u].push_back(v);
            edges[v].push_back(u);
        }
        int ans = 1;
        for (int i = 1; i <= n; i++) {
            if (!col[i]) {
                col[i] = 1;
                z = c = false;
                dfs(i);
                if (c) ans = 0;
                else if (!z) ans = ans * 2 % mod;
            }
        }
        cout << ans << "\n";
    }
    return 0;
}
SubtaskSumTestVerdictTimeMemory
base60/60
1Accepted0/01ms316 KiB
2Accepted0/017ms1332 KiB
3Accepted3/31ms508 KiB
4Accepted3/31ms316 KiB
5Accepted3/31ms316 KiB
6Accepted3/31ms316 KiB
7Accepted2/234ms1840 KiB
8Accepted2/234ms1968 KiB
9Accepted2/234ms1844 KiB
10Accepted2/232ms1816 KiB
11Accepted2/232ms1948 KiB
12Accepted2/234ms1772 KiB
13Accepted2/228ms2100 KiB
14Accepted2/228ms2112 KiB
15Accepted2/229ms2100 KiB
16Accepted2/230ms2236 KiB
17Accepted2/230ms2100 KiB
18Accepted2/230ms2168 KiB
19Accepted2/235ms2100 KiB
20Accepted2/235ms1936 KiB
21Accepted2/235ms2100 KiB
22Accepted2/235ms2104 KiB
23Accepted2/235ms2100 KiB
24Accepted2/235ms2036 KiB
25Accepted2/235ms2108 KiB
26Accepted2/230ms2180 KiB
27Accepted2/234ms1992 KiB
28Accepted2/230ms1596 KiB
29Accepted2/216ms1588 KiB
30Accepted2/216ms1588 KiB