256372026-02-23 20:06:11GeneratrollTrükkcpp17Elfogadva 60/6027ms856 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int t;
	cin >> t;
	auto q = [](ll b, ll e) {
		ll r = 1;
		while (e > 0) {
			if (e % 2 == 1) {
				r = (r * b) % 1000000007;
			}
			b = (b * b) % 1000000007;
			e = e / 2;
		}
		return r;
	};
	while (t--) {
		int n, k;
		cin >> n >> k;
		vector<int> p(n + 1), d(n + 1, 0), s(n + 1, 1);
		iota(p.begin(), p.end(), 0);
		int m = n + 1, o = 1;
		auto f = [&](auto self, int i) -> int {
			if (p[i] == i) {
				return i;
			}
			int r = self(self, p[i]);
			d[i] = d[i] ^ d[p[i]];
			p[i] = r;
			return r;
		};
		for (int i = 0; i < k; i++) {
			int a, b;
			cin >> a >> b;
			if (o == 0) {
				continue;
			}
			int u = a - 1, v = b;
			int x = f(f, u), y = f(f, v);
			if (x != y) {
				if (s[x] < s[y]) {
					swap(x, y);
					swap(u, v);
				}
				p[y] = x;
				d[y] = d[u] ^ d[v] ^ 1;
				s[x] = s[x] + s[y];
				m--;
			} else {
				if (d[u] == d[v]) {
					o = 0;
				}
			}
		}
		if (o == 0) {
			cout << 0 << '\n';
		} else {
			cout << q(2, m - 1) << '\n';
		}
	}
	return 0;
}

RészfeladatÖsszpontTesztVerdiktIdőMemória
base60/60
1Elfogadva0/01ms316 KiB
2Elfogadva0/013ms564 KiB
3Elfogadva3/31ms316 KiB
4Elfogadva3/31ms316 KiB
5Elfogadva3/31ms316 KiB
6Elfogadva3/31ms316 KiB
7Elfogadva2/226ms612 KiB
8Elfogadva2/224ms652 KiB
9Elfogadva2/225ms612 KiB
10Elfogadva2/226ms596 KiB
11Elfogadva2/224ms656 KiB
12Elfogadva2/225ms656 KiB
13Elfogadva2/224ms664 KiB
14Elfogadva2/223ms660 KiB
15Elfogadva2/223ms612 KiB
16Elfogadva2/224ms660 KiB
17Elfogadva2/224ms656 KiB
18Elfogadva2/223ms612 KiB
19Elfogadva2/227ms612 KiB
20Elfogadva2/226ms664 KiB
21Elfogadva2/225ms612 KiB
22Elfogadva2/224ms612 KiB
23Elfogadva2/224ms612 KiB
24Elfogadva2/224ms612 KiB
25Elfogadva2/224ms660 KiB
26Elfogadva2/223ms856 KiB
27Elfogadva2/226ms652 KiB
28Elfogadva2/224ms612 KiB
29Elfogadva2/213ms616 KiB
30Elfogadva2/212ms656 KiB