Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //#include<bits/stdc++.h>
- #include<iostream>
- #include<cstdlib>
- #include<vector>
- #include<queue>
- #include<set>
- #define long long long
- #define nln '\n'
- const long N = 2*1e5+1;
- using namespace std;
- vector<bool> pic;
- vector<long> vtx;
- vector<vector<long>> mat(N);
- long mul, ans, vec = 0, edg = 0;
- void dfs(long i)
- {
- pic[i] = 1;
- ++vec;
- edg += vtx[i];
- for (const auto j : mat[i])
- if (!pic[j])
- {
- dfs(j);
- break;
- }
- }
- int main()
- {
- //freopen("just_one.inp", "r", stdin);
- long n, m;
- cin >> n >> m;
- vtx.resize(n+1, 0);
- for (long i = 1; i <= m; ++i)
- {
- long x, y;
- cin >> x >> y;
- ++vtx[x]; ++vtx[y];
- mat[x].push_back(y);
- mat[y].push_back(x);
- }
- pic.resize(n+1, 0);
- ans = 1;
- for (long i = 1; i <= n; ++i)
- {
- if (!pic[i])
- {
- ans *= 2;
- vec = 0; edg = 0;
- dfs(i);
- if (vec*2 != edg)
- {
- ans = 0;
- break;
- }
- }
- }
- cout << ans << nln;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment