# | 제출 시각UTC-0 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
953251 | andrei_boaca | 조이터에서 친구를 만드는건 재밌어 (JOI20_joitter2) | C++17 | 4 ms | 16988 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
ll n,m,ans;
ll comp[100005];
vector<ll> dsu[100005];
set<ll> par[100005];
set<pll> edgenod[100005];
set<ll> edgecomp[100005];
void dsu_merge(ll c1,ll c2)
{
ll nr1=(int)dsu[c1].size()+(int)par[c1].size()+(int)edgenod[c1].size();
ll nr2=(int)dsu[c2].size()+(int)par[c2].size()+(int)edgenod[c2].size();
if(nr1<nr2)
swap(c1,c2);
ll sz2=dsu[c2].size();
ll sz1=dsu[c1].size();
ll val=(ll)dsu[c1].size()*(ll)dsu[c2].size();
val=val*2LL;
ans+=val;
val=(ll)par[c1].size()*sz2;
ans+=val;
set<ll> why;
for(ll x:par[c2])
{
edgenod[comp[x]].erase({x,c2});
if(edgecomp[comp[x]].find(c2)!=edgecomp[comp[x]].end())
edgecomp[comp[x]].erase(c2);
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |