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...