이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "bits/stdc++.h"
using namespace std;
#ifdef Nero
#include "Deb.h"
#else
#define deb(...)
#endif
const int N = 3e5 + 5;
int num;
int a[N];
int id[N];
int sz[N];
bool c[N];
int compsz[N];
long long ans;
stack<int> stk;
int vis[N], low[N];
bool is_cutpoint[N];
vector<int> g[N], t[N];
vector<vector<int>> bcc;
void dfs(int v, int p) {
vis[v] = low[v] = ++num;
stk.push(v);
for (int u : g[v]) {
if (u == p) {
continue;
}
if (vis[u]) {
low[v] = min(low[v], vis[u]);
continue;
}
dfs(u, v);
low[v] = min(low[v], low[u]);
if (low[u] >= vis[v]) {
is_cutpoint[v] = true;
bcc.push_back({});
bcc.back().push_back(v);
while (bcc.back().back() != u) {
bcc.back().push_back(stk.top());
stk.pop();
}
}
}
}
void dfs2(int v, int p) {
vis[v] = true;
sz[v] = a[v];
for (int u : t[v]) {
if (u == p) continue;
dfs2(u, v);
sz[v] += sz[u];
}
}
void dfs3(int v, int p, int n) {
for (int u : t[v]) {
if (c[v]) {
int x = (u == p ? n - sz[v] : sz[u]);
ans -= (long long) (compsz[u] - 1) * (n - x) * (n - x - 1);
}
if (u != p) {
dfs3(u, v, n);
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
for (int i = 0; i < m; ++i) {
int u, v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
for (int i = 1; i <= n; ++i) {
if (!vis[i]) {
dfs(i, i);
if (g[i].size() <= 1) {
is_cutpoint[i] = false;
}
}
}
int idd = 0;
for (int i = 1; i <= n; ++i) {
if (is_cutpoint[i]) {
c[idd] = true;
a[idd] = 1;
id[i] = idd++;
}
}
for (int i = 0; i < (int) bcc.size(); ++i) {
vector<int>& comp = bcc[i];
int cur = idd++;
compsz[cur] = comp.size();
for (int v : comp) {
if (is_cutpoint[v]) {
t[id[v]].push_back(cur);
t[cur].push_back(id[v]);
} else {
id[v] = cur;
a[cur]++;
}
}
}
memset(vis, 0, sizeof vis);
for (int i = 0; i < idd; ++i) {
if (!vis[i]) {
dfs2(i, i);
dfs3(i, i, sz[i]);
ans += (long long) sz[i] * (sz[i] - 1) * (sz[i] - 2);
}
}
cout << ans << '\n';
return 0;
}
# | 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... |