Submission #1160936

#TimeUsernameProblemLanguageResultExecution timeMemory
1160936HanksburgerMaking Friends on Joitter is Fun (JOI20_joitter2)C++20
0 / 100
3 ms7240 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...