#include <bits/stdc++.h>
#define int long long
using namespace std;
vector<int> vec[100005];
set<pair<int, int> > ss;
set<int> s[100005];
int par[100005];
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, m, ans=0;
cin >> n >> m;
for (int i=1; i<=n; i++)
{
vec[i].push_back(i);
par[i]=i;
}
for (int i=0; i<m; i++)
{
int u, v;
cin >> u >> v;
int x=par[u], y=par[v];
if (x!=y)
{
if (ss.find({y, x})!=ss.end())
{
if (vec[x].size()>vec[y].size())
swap(x, y);
ans-=s[x].size()*vec[x].size();
ans-=s[y].size()*vec[y].size();
ans-=vec[x].size()*(vec[x].size()-1);
ans-=vec[y].size()*(vec[y].size()-1);
for (int w:s[x])
{
if (par[w]!=y)
{
ss.insert({par[w], y});
s[y].insert(w);
}
}
for (int w:vec[x])
{
if (s[y].find(w)!=s[y].end())
s[y].erase(w);
vec[y].push_back(w);
par[w]=y;
}
ans+=s[y].size()*vec[y].size();
ans+=vec[y].size()*(vec[y].size()-1);
}
else if (s[y].find(u)==s[y].end())
{
ss.insert({x, y});
s[y].insert(u);
ans+=vec[y].size();
}
}
cout << ans << '\n';
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |