This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define N 100005
#define int long long
int low[N], id[N], cnt, siz[2 * N], n, m, res = 0, bcc, sizncc;
vector<int> adj[N], adj2[2 * N];
stack<int> st;
void dfs(int u, int p){
low[u] = id[u] = ++cnt;
sizncc++;
st.push(u);
for (auto x : adj[u]){
if (x == p){
p = -1;
continue;
}
if (id[x]){
low[u] = min(low[u], id[x]);
}
else{
dfs(x, u);
low[u] = min(low[u], low[x]);
if (low[x] >= id[u]){
bcc++;
int s = -1;
adj2[u].push_back(bcc);
while (s != x){
s = st.top();
st.pop();
low[s] = id[s] = n + 1;
adj2[bcc].push_back(s);
}
}
}
}
}
void cal(int u, int p){
int si = (int) adj2[u].size();
siz[u] = (u <= n);
for (auto x : adj2[u]){
if (x == p) continue;
cal(x, u);
siz[u] += siz[x];
if (u > n){
res -= si * siz[x] * (siz[x] - 1);
}
}
if (u > n) res -= si * (sizncc - siz[u]) * (sizncc - siz[u] - 1);
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cin >> n >> m;
bcc = n;
for (int i = 1; i <= m; i++){
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
for (int i = 1; i <= n; i++){
if (!id[i]){
sizncc = 0;
dfs(i, 0);
res += sizncc * (sizncc - 1) * (sizncc - 2);
cal(i, 0);
}
}
cout << res;
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... |