#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MAXN = 2e5+5;
const int INF = 1e9;
int N, M, scc[MAXN];
char C, D;
vector <int> adj[MAXN], bct[MAXN];
ll t, group;
int sz[MAXN], tin[MAXN], low[MAXN];
bool ap[MAXN];
stack <ll> stk;
void dfs(ll idx, ll par) {
stk.push(idx);
low[idx] = tin[idx] = ++t;
sz[idx] = 1;
for (auto i : adj[idx]) {
if (!tin[i]) {
dfs(i, idx);
low[idx] = min(low[idx], low[i]);
if (low[i] >= tin[idx]) {
group++;
while (!stk.empty() && stk.top() != i) {
bct[group].push_back(stk.top());
bct[stk.top()].push_back(group);
sz[group] += sz[stk.top()];
stk.pop();
}
bct[group].push_back(stk.top());
bct[stk.top()].push_back(group);
sz[group] += sz[stk.top()];
stk.pop();
sz[idx] += sz[group];
bct[group].push_back(idx);
bct[idx].push_back(group);
}
}
else if (i != par) {
low[idx] = min(low[idx], tin[i]);
}
}
}
int main () {
ll N, M; cin >> N >> M;
for (int i = 1; i <= M; i++) {
ll u, v; cin >> u >> v;
adj[u].push_back(v), adj[v].push_back(u);
}
group = N;
ll ans = 0;
for (int i = 1; i <= N; i++) {
ll lst = group;
if (!tin[i]) {
dfs(i, -1);
for (int j = lst + 1; j <= group; j++) {
for (auto x : bct[j]) {
if (sz[x] > sz[j]) {
ans += ((ll)bct[j].size() - 1) * (sz[i] - sz[j]) * (sz[j] - 1);
}
else {
ans += ((ll)bct[j].size() - 1) * sz[x] * (sz[i] - 1 - sz[x]);
}
}
}
}
}
cout << ans << "\n";
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |