#include <algorithm>
#include <cmath>
#include <cstring>
#include <iostream>
#include <iomanip>
#include <limits.h>
#include <set>
#include <string>
#include <queue>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <deque>
#include <map>
#define SZ(x) int(x.size())
#define FR(i,a,b) for(int i=(a);i<(b);++i)
#define FOR(i,n) FR(i,0,n)
#define FAST ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define A first
#define B second
typedef long long LL;
typedef long double LD;
typedef std::pair<int,int> PII;
typedef std::pair<LL,LL> PLL;
using namespace std;
const int MAXN=1e5+5;
vector<int> adj[MAXN];
LL siz[MAXN];
LL ans=0;
void dfs(int u, int par){
siz[u]=1;
for (auto to: adj[u]){
if (to==par) continue;
dfs(to,u);
siz[u]+=siz[to];
}
}
void cal(int u, int par, LL total){
LL calc=(total-1)*(total-1);
for (auto to: adj[u]){
if (to==par){
calc-=(total-siz[u])*(total-siz[u]);
}
else{
calc-=(siz[to])*(siz[to]);
cal(to, u, total);
}
}
ans+=calc;
}
signed main(){
FAST;
int n,m; cin>>n>>m;
FOR(i,m){
int u,v; cin>>u>>v;
adj[u].push_back(v);
adj[v].push_back(u);
}
FR(i,1,n+1){
if (siz[i]==0){
dfs(i,-1);
LL temp=siz[i];
cal(i,-1,temp);
}
}
cout<<ans;
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... |