제출 #766761

#제출 시각아이디문제언어결과실행 시간메모리
766761onjo0127조이터에서 친구를 만드는건 재밌어 (JOI20_joitter2)C++17
0 / 100
8 ms14292 KiB
#include <bits/stdc++.h> #define sz(V) ((int)V.size()) using namespace std; using pii = pair<int, int>; using ll = long long; set<pii> E; int P[100009], B[100009]; set<int> I[100009], O[100009], A[100009]; ll ans; int root(int x) { if(P[x] == x) return x; return P[x] = root(P[x]); } ll f(int x) { return 1LL * sz(A[x]) * (sz(I[x]) - B[x]) + 1LL * sz(A[x]) * (sz(A[x]) - 1); } void merg(int u, int v) { u = root(u); v = root(v); if(A[u].size() > A[v].size()) swap(u, v); ans -= f(u) + f(v); B[v] += B[u]; for(auto& it: A[u]) { if(O[v].find(it) != O[v].end()) ++B[v]; if(I[v].find(it) != I[v].end()) ++B[v]; A[v].insert(it); } for(auto& it: I[u]) { if(I[v].find(it) != I[v].end()) --B[v]; else I[v].insert(it); } for(auto& it: O[u]) O[v].insert(it); ans += f(v); P[u] = v; } int main() { int N, M; scanf("%d%d", &N, &M); for(int i=1; i<=N; i++) { P[i] = i; A[i] = {i}; } while(M--) { int u, v; scanf("%d%d", &u, &v); E.insert({u, v}); int U = root(u), V = root(v); if(U != V) { ans -= f(V); I[V].insert(U); O[U].insert(V); ans += f(V); if(E.find({v, u}) != E.end()) merg(u, v); } printf("%lld\n", ans); } return 0; }

컴파일 시 표준 에러 (stderr) 메시지

joitter2.cpp: In function 'int main()':
joitter2.cpp:41:17: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   41 |  int N, M; scanf("%d%d", &N, &M);
      |            ~~~~~^~~~~~~~~~~~~~~~
joitter2.cpp:47:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   47 |   int u, v; scanf("%d%d", &u, &v);
      |             ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...