Submission #1158840

#TimeUsernameProblemLanguageResultExecution timeMemory
1158840ace5Making Friends on Joitter is Fun (JOI20_joitter2)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; vector<set<int>> ine; //vertices vector<set<int>> oute; //components vector<vector<int>> comp; vector<int> mycomp; ll ans = 0; ll func(int v) { ll k = ine[v].size(); ll szc = comp[v].size(); return k * szc + szc*(szc-1); } void mrg(int u,int v) { ans -= func(u); ans -= func(v); if(ine[u].size()+oute[u].size()+comp[u].size() > ine[v].size()+oute[v].size()+comp[v].size()) swap(u,v); for(auto c:ine[u]) { if(mycomp[c] != v) { ine[v].insert(c); oute[mycomp[c]].erase(u); oute[mycomp[c]].insert(v); } } for(auto c:oute[u]) { if(c != v) oute[v].insert(c); } oute[v].erase(u); for(auto c:comp[u]) { ine[v].erase(c); comp[v].push_back(c); mycomp[c] = v; } //cout << ine[v].size() << ' '; ine[u].clear(); comp[u].clear(); // cout << ine[v].size() << ' '; ans += func(v); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n,m; cin >> n >> m; ine.resize(n); oute.resize(n); comp.resize(n); mycomp.resize(n); for(int j = 0;j < n;++j) { mycomp[j] = j; comp[j].push_back(j); } for(int j = 0;j < m;++j) { int u,v; cin >> u >> v; int u2 = u-1; u--; v--; u = mycomp[u]; v = mycomp[v]; if(u == v) { cout << ans << "\n"; continue; } ans -= func(v); ine[v].insert(u2); oute[u].insert(v); ans += func(v); if(oute[v].find(u) != oute[v].end()) { mrg(u,v); } cout << ans << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...