이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
const int N = 1e5 + 9;
int n, m;
vector<int> g[N];
// bridge tree (WA for subtask 89)
namespace subtask34567 {
int num[N], low[N], tme;
int lab[N], cnt_scc, sz[N];
int path[N], top;
void tarjan(int u, int p) {
num[u] = low[u] = ++tme;
path[++top] = u;
for (int v : g[u]) if (v != p) {
if (num[v]) low[u] = min(low[u], num[v]);
else {
tarjan(v, u);
low[u] = min(low[u], low[v]);
}
}
if (num[u] == low[u]) { // chot
++cnt_scc;
int v;
do {
v = path[top--];
lab[v] = cnt_scc;
num[v] = low[v] = N;
++sz[cnt_scc];
} while (v != u);
}
}
vector<int> g2[N];
void init_graph() {
for (int u = 1; u <= n; ++u) for (int v : g[u])
if (lab[u] != lab[v]) g2[lab[u]].push_back(lab[v]);
}
ll ans, dp[N][3];
bool vis[N];
void dfs(int u, int p) {
vis[u] = true;
dp[u][1] = sz[u];
dp[u][2] = (ll)(sz[u] - 1) * (sz[u] - 1);
ans += (ll)sz[u] * (sz[u] - 1) * (sz[u] - 2);
for (int v : g2[u]) if (v != p) {
dfs(v, u);
dp[u][1] += dp[v][1];
dp[u][2] += dp[v][2];
dp[u][2] += dp[v][1] * sz[u];
ans += dp[v][1] * (sz[u] - 1 + (ll)(sz[u] - 1) * (sz[u] - 2)) * 2;
ans += dp[v][2] * sz[u] * 2;
}
}
void solve() {
for (int i = 1; i <= n; ++i)
if (!num[i]) tarjan(i, 0);
init_graph();
for (int u = 1; u <= cnt_scc; ++u)
if (!vis[u]) dfs(u, 0);
cout << ans << '\n';
}
}
bool f[N];
int main() {
cin.tie(NULL)->sync_with_stdio(false);
cin >> n >> m;
for (int i = 0, u, v; i < m; ++i) {
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
subtask34567::solve();
}
/** /\_/\
* (= ._.)
* / >0 \>1
**/
# | 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... |