227892026-01-15 18:32:10algoproTrükkcpp17Hibás válasz 2/6079ms2988 KiB
// UUID: 98fe4c4c-432b-4656-9154-4e37a051a86c
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
vector<bool> vis;
vector<int> parity;
vector<vector<int>> g;
vector<array<int,2>> iv;

void dfs(int u,int p){
	vis[u]=1; parity[u]=p;
	for (int v:g[u]){
		if (!vis[v]) dfs(v,1-p);
	}
}

ll fastPow(ll a, ll b, ll mod = 1e9+7){
	if (b == 0) return 1;
	if (b == 1) return a;
	ll res = fastPow(a, b / 2);
	if (b & 1) return res * res % mod * a % mod;
	return res * res % mod;
}

int main() {
	int t; cin >> t;
	for (int j=0;j<t;j++){
		int n,k; cin >> n >> k;
		vis.assign(n + 1,0); g.assign(n + 1,vector<int>()); parity.assign(n + 1,0);
		for (int i=0;i<k;i++){
			int u,v; cin >> u >> v;
			g[u-1].push_back(v);
			g[v].push_back(u-1);
			iv.push_back({u - 1,v});
		}
		int c=0;
		for (int i=0;i<=n;i++){
			if (!vis[i]) {dfs(i,0); c++;}
		}
		bool jo = true;
		for (auto i:iv){
			if (parity[i[0]]==parity[i[1]]){
				cout << 0 << '\n'; jo = false;
				break;
			}
		}
		if (!jo) continue;
		cout << fastPow(2, c-1) << '\n';
	}
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base2/60
1Elfogadva0/01ms316 KiB
2Hibás válasz0/039ms1712 KiB
3Hibás válasz0/31ms316 KiB
4Hibás válasz0/31ms316 KiB
5Hibás válasz0/31ms316 KiB
6Hibás válasz0/32ms508 KiB
7Hibás válasz0/279ms2676 KiB
8Hibás válasz0/279ms2804 KiB
9Hibás válasz0/279ms2896 KiB
10Hibás válasz0/279ms2732 KiB
11Elfogadva2/279ms2732 KiB
12Hibás válasz0/279ms2856 KiB
13Hibás válasz0/274ms2900 KiB
14Hibás válasz0/274ms2804 KiB
15Hibás válasz0/275ms2864 KiB
16Hibás válasz0/274ms2980 KiB
17Hibás válasz0/274ms2984 KiB
18Hibás válasz0/272ms2776 KiB
19Hibás válasz0/279ms2732 KiB
20Hibás válasz0/279ms2732 KiB
21Hibás válasz0/278ms2732 KiB
22Hibás válasz0/279ms2988 KiB
23Hibás válasz0/279ms2816 KiB
24Hibás válasz0/279ms2832 KiB
25Hibás válasz0/279ms2924 KiB
26Hibás válasz0/276ms2944 KiB
27Hibás válasz0/279ms2732 KiB
28Hibás válasz0/275ms2728 KiB
29Hibás válasz0/235ms1980 KiB
30Hibás válasz0/235ms1964 KiB