이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define TRACE(x) cerr << #x << " :: " << x << endl
#define _ << " " <<
#define SZ(x) (int)(x).size()
#define ALL(x) (x).begin(),(x).end()
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define RFOR(i,a,b) for (int i=(a);i>=(b);--i)
const int MX_N = 1e5+5;
const int MX_M = 2e5+5;
int N, M;
vector<int> al[MX_N];
namespace BCT {
int pre[MX_N], low[MX_N], dfc, sz;
int stk[MX_N], tp;
int wgh[2*MX_N], cnt;
vector<int> T[2*MX_N];
int sub[2*MX_N];
long long ans;
void Tarjan(int u) {
pre[u] = low[u] = ++dfc;
stk[++tp] = u;
++sz;
for (int v : al[u]) {
if (!pre[v]) {
Tarjan(v);
low[u] = min(low[u],low[v]);
if (low[v] == pre[u]) {
wgh[++cnt] = 0;
for (int x = 0; x != v; --tp) {
x = stk[tp];
T[cnt].push_back(x);
T[x].push_back(cnt);
++wgh[cnt];
}
T[cnt].push_back(u);
T[u].push_back(cnt);
++wgh[cnt];
}
} else low[u] = min(low[u],pre[v]);
}
}
void dfs(int u, int p) {
long long cur = 0;
sub[u] = (u<=N);
for (int v : T[u]) if (v != p) {
dfs(v,u);
cur += 2LL * wgh[u] * sub[u] * sub[v];
sub[u] += sub[v];
}
cur += 2LL * wgh[u] * sub[u] * (sz - sub[u]);
//TRACE(u _ p _ sz _ sub[u] _ cur);
ans += cur;
}
long long solve() {
fill_n(pre,N+1,0); dfc = tp = 0;
fill_n(wgh,N+1,-1); ans = 0;
cnt = N;
FOR(i,1,N) if (!pre[i]) {
sz = 0;
Tarjan(i), --tp;
dfs(i,0);
}
return ans;
}
void dbg() {
FOR(i,1,cnt) {
cout << i << " sz " << wgh[i] << " :: ";
for (auto& x : T[i]) cout << x << ' ';
cout << endl;
}
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> N >> M;
FOR(i,1,M){
int U, V; cin >> U >> V;
al[U].push_back(V);
al[V].push_back(U);
}
cout << BCT::solve() << '\n';
//BCT::dbg();
}
# | 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... |