6757 2023. 12. 18 19:45:09 111 Trükk cpp17 Elfogadva 60/60 210ms 43748 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define double long double

#define pii pair<int, int>

#define MOD 1000000007

int pow_mod(int x, int p, int m = MOD) {
	int r = 1;
	while (p > 0) {
		if (p % 2 == 1) {
			r *= x;
			r %= m;
		}
		p /= 2;
		x *= x;
		x %= m;
	}
	return r;
}

void scc_dfs(const auto& g, auto& v, auto& s, int i) {
	if (v[i]) {
		return;
	}
	v[i] = true;
	for (int j : g[i]) {
		scc_dfs(g, v, s, j);
	}
	s.push_back(i);
}

void scc(const auto& g, auto& h) {
	int N = g.size();
	vector<int> v;
	vector<int> s;
	v.assign(N, false);
	for (int i = 0; i < N; i++) {
		scc_dfs(g, v, s, i);
	}
	vector<vector<int>> gt(N);
	for (int i = 0; i < N; i++) {
		for (int j : g[i]) {
			gt[j].push_back(i);
		}
	}
	reverse(s.begin(), s.end());
	v.assign(N, false);
	for (int i : s) {
		if (v[i]) {
			continue;
		}
		h.emplace_back();
		scc_dfs(gt, v, h.back(), i);
	}
}

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
#ifdef CB
	freopen("be2.txt", "r", stdin);
//	freopen("out.txt", "w", stdout);
#endif
	int T;
	cin >> T;
	while (T--) {
		int N, K;
		cin >> N >> K;
		N++;
		vector<vector<int>> g(N * 2);
		for (int i = 0; i < K; i++) {
			int a, b;
			cin >> a >> b;
			g[a - 1].push_back(N + b);
			g[N + a - 1].push_back(b);
			g[b].push_back(N + a - 1);
			g[N + b].push_back(a - 1);
		}
		vector<vector<int>> h;
		scc(g, h);
		bool ok = true;
		for (int i = 0; i < h.size(); i++) {
			set<int> s;
			for (int j : h[i]) {
				if (s.count((N + j)%(N*2)))ok=false;
				s.insert(j);
			}
		}
		cout << (!ok ? 0 : pow_mod(2, h.size() / 2 - 1)) << endl;
	}
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 60/60
1 Elfogadva 0/0 3ms 1832 KiB
2 Elfogadva 0/0 96ms 10488 KiB
3 Elfogadva 3/3 3ms 2808 KiB
4 Elfogadva 3/3 3ms 3000 KiB
5 Elfogadva 3/3 3ms 3088 KiB
6 Elfogadva 3/3 3ms 3224 KiB
7 Elfogadva 2/2 196ms 18536 KiB
8 Elfogadva 2/2 202ms 20704 KiB
9 Elfogadva 2/2 197ms 22108 KiB
10 Elfogadva 2/2 185ms 22308 KiB
11 Elfogadva 2/2 189ms 24728 KiB
12 Elfogadva 2/2 193ms 25472 KiB
13 Elfogadva 2/2 97ms 27324 KiB
14 Elfogadva 2/2 103ms 28960 KiB
15 Elfogadva 2/2 100ms 30080 KiB
16 Elfogadva 2/2 104ms 30856 KiB
17 Elfogadva 2/2 101ms 32400 KiB
18 Elfogadva 2/2 100ms 33432 KiB
19 Elfogadva 2/2 207ms 32884 KiB
20 Elfogadva 2/2 210ms 35288 KiB
21 Elfogadva 2/2 209ms 36312 KiB
22 Elfogadva 2/2 193ms 37828 KiB
23 Elfogadva 2/2 188ms 38972 KiB
24 Elfogadva 2/2 188ms 40264 KiB
25 Elfogadva 2/2 187ms 41180 KiB
26 Elfogadva 2/2 98ms 42804 KiB
27 Elfogadva 2/2 209ms 43504 KiB
28 Elfogadva 2/2 151ms 43540 KiB
29 Elfogadva 2/2 61ms 43424 KiB
30 Elfogadva 2/2 61ms 43748 KiB