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 ll long long
#define pii pair<int, int>
#define fi first
#define se second
const int mxN=1e5;
int n, m, dt=1, tin[mxN], low[mxN], sth, bccI;
pii st[2*mxN];
ll sz1[2*mxN], sz2[mxN], ans;
vector<int> adj1[mxN], adj2[2*mxN];
set<int> bccs[mxN];
bool vis[2*mxN];
void dfs1(int u, int p) {
tin[u]=low[u]=dt++;
for(int v : adj1[u]) {
if(!tin[v]) {
int lsth=sth;
st[sth++]={u, v};
dfs1(v, u);
low[u]=min(low[v], low[u]);
if(low[v]>=tin[u]) {
while(sth>lsth) {
--sth;
bccs[bccI].insert(st[sth].fi);
bccs[bccI].insert(st[sth].se);
}
++bccI;
}
} else if(v!=p)
low[u]=min(tin[v], low[u]);
}
}
void dfs2(int u, int p) {
// cout << "d2 " << u << endl;
vis[u]=1;
sz1[u]=u<n;
ll n2=n-adj2[u].size();
for(int v : adj2[u]) {
if(v==p)
continue;
dfs2(v, u);
sz1[u]+=sz1[v];
n2-=sz1[v]-1;
if(u>=n)
ans+=2*(sz1[v]-sz2[v]+adj2[u].size()-2)*n2;
}
if(u<n) {
n2=sz1[u]-sz2[u]+adj2[p].size()-2;
for(int v : adj2[u]) {
if(v==p)
continue;
n2-=sz1[v]-adj2[v].size()+1;
ans+=2*(sz1[v]-adj2[v].size()+1)*n2;
}
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
while(m--) {
int u, v;
cin >> u >> v, --u, --v;
adj1[u].push_back(v);
adj1[v].push_back(u);
}
dfs1(0, -1);
for(int i=0; i<bccI; ++i) {
ll bs=bccs[i].size();
for(int j : bccs[i]) {
adj2[j].push_back(i+n);
adj2[i+n].push_back(j);
sz2[j]+=bs-1;
}
ans+=bs*(bs-1)*(bs-2)+2*(bs-1)*(bs-1)*(n-bs)+bs*(bs-1)*(bs-1);
}
for(int i=0; i<n; ++i)
ans-=sz2[i]*sz2[i];
// cout << bccI << " " << ans << endl;
// for(int i=0; i<n; ++i)
// cout << sz2[i] << " ";
// cout << endl;
for(int i=0; i<bccI; ++i)
if(!vis[i+n])
dfs2(i+n, -1);
cout << ans;
}
# | 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... |