Untitled
unknown
c_cpp
2 years ago
2.1 kB
3
Indexable
#include "bits/stdc++.h" using namespace std; using ll = long long; using ull = unsigned long long; using db = long double; using pii = pair<int, int>; using pll = pair<ll, ll>; using pdd = pair<db, db>; using tiii = tuple<int, int, int>; using str = string; #define vt vector #define pb push_back #define eb emplace_back #define ins insert #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define sz(x) (int)x.size() #define mp make_pair #define mt make_tuple #define fi first #define se second const int MOD = 1e9 + 7; const int maxN = 300000; const int INFi = 2e9; const ll INF = 4e18; vt<int> graph[100000]; int colors[100000]; int cntwhite, cntblack; int factorial(int x) { int result = 1; for (int i = 2; i <= x; ++i) result *= i; return result; } void dfs(int x) { for (int v : graph[x]) { if (!colors[v]) { if (colors[x] == 1) { colors[v] = 2; cntblack++; } else { colors[v] = 1; cntwhite++; } dfs(v); } } } void solve() { fill(colors, colors + 100000, 0); int n, m; cin >> n >> m; for (int i = 0; i < m; ++i) { int u, v; cin >> u >> v; u--; v--; graph[u].pb(v); graph[v].pb(u); } ll answ = 0; for (int i = 0; i < n; ++i) { if (!colors[i]) { cntwhite = 1; cntblack = 0; colors[i] = 1; dfs(i); if (cntwhite > 1) { answ += factorial(cntwhite) / 2 / factorial(cntwhite - 2); } if (cntblack > 1) { answ += factorial(cntblack) / 2 / factorial(cntblack - 2); } } } cout << answ; } signed main() { ios::sync_with_stdio(false); cin.tie(NULL); // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); int t = 1; // cin >> t; while (t--) { solve(); } return 0; }
Editor is loading...