제출 #1368067

#제출 시각아이디문제언어결과실행 시간메모리
1368067vlomaczkMulti Communication 2 (JOI26_multi)C++20
48 / 100
393 ms2492 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
typedef unsigned long long ll;
using namespace __gnu_pbds;
using namespace std;
#define ff first
#define ss second
#define pi pair<ll, ll>
#define pll pair<long long, long long>
#define vi vector<ll>
#define vll vector<long long>
#define vpi vector<pair<ll,ll>>
#define vpll vector<pair<long long, long long>>
#define pb push_back
#define count_bits(x) __builtin_popcountll((x))
#define all(x) (x).begin(),(x).end()
#define sz(x) (ll)(x).size()
#define forall(it,x) for(auto& it:(x))
#define mp make_pair
pi operator+(pi a, pi b) { return mp(a.ff+b.ff, a.ss+b.ss); }
pi operator-(pi a, pi b) { return mp(a.ff-b.ff, a.ss-b.ss); }
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#include "multi.h"

vector<ll> rep;

ll Find(ll v) {
	return rep[v]==v ? v : rep[v] = Find(rep[v]);
}

bool Union(ll a, ll b) {
	a=Find(a);
	b=Find(b);
	if(a==b) return 0;
	if(a < b) swap(a,b);
	rep[a] = b;
	return 1;
}

ll inf = 1ULL<<60;

std::vector<unsigned long long> strategy(int N, int r, int my,
std::vector<unsigned long long> A, std::vector<unsigned long long> B) {
	rep.assign(N, 0);
	ll X = B[0];
	if(r==0) {
		for(ll i=0; i<N; ++i) rep[i] = i;
	} else {
		set<ll> V;
		for(ll i=1; i<N; ++i) {
			rep[i] = B[i]%(1ULL<<8);
			B[i] /= (1ULL<<8);
		}
		vector<pi> best(N, {inf,0});
		for(ll i=1; i<N; ++i) {
			ll nei = B[i]%(1ULL<<8);
			B[i] /= (1ULL<<8);
			best[Find(i)] = min(best[Find(i)], {B[i], nei});
		}
		for(int i=1; i<N; ++i) {
			if(best[i].first < inf && Union(i, best[i].second)) {
				X+=best[i].first;
			}
		}
		for(int i=0; i<N; ++i) V.insert(Find(i));
		if(V.size() == 1) {
			return {X};
		}
	}
	
	pi best = {inf,0};
	for(ll i=0; i<N; ++i) if(Find(i)!=Find(my)) best = min(best, {A[i], i});
	ll value = (best.first<<16) + (best.second<<8) + Find(my);
	if(my==0) value = X;
	vector<ll> C(N, value);
	
	
	return C;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…