Submission #961694

#TimeUsernameProblemLanguageResultExecution timeMemory
961694danikoynov조이터에서 친구를 만드는건 재밌어 (JOI20_joitter2)C++14
0 / 100
1 ms604 KiB
#include <bits/stdc++.h> #define endl '\n' using namespace std; typedef long long ll; const int maxn = 2010; int n, par[maxn], m; int find_leader(int v) { if (par[v] == v) return v; return (par[v] = find_leader(par[v])); } int sz[maxn]; set < int > in_adj[maxn], out_adj[maxn]; ll calc(int v) { ll s = sz[v]; return s * (s - 1 + (ll)(in_adj[v].size())); } void solve() { cin >> n >> m; for (int i = 1; i <= n; i ++) { par[i] = i; sz[i] = 1; } ll edges = 0; for (int i = 1; i <= m; i ++) { int v, u; cin >> v >> u; edges = edges - calc(find_leader(v)); edges = edges - calc(find_leader(u)); int lv = find_leader(v), lu = find_leader(u); if (in_adj[lv].find(lu) != in_adj[lv].end()) { in_adj[lv].erase(lu); for (int u : in_adj[lu]) in_adj[lv].insert(u); sz[lv] += sz[lu]; edges = edges + calc(lv); } else { in_adj[lu].insert(v); edges = edges + calc(find_leader(lv)); edges = edges + calc(find_leader(lu)); } cout << edges << endl; } } int main() { solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...