Submission #693980

#TimeUsernameProblemLanguageResultExecution timeMemory
693980penguin133Phone Plans (CCO22_day2problem2)C++17
5 / 25
206 ms25432 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define pi pair<int, int>
#define pii pair<int, pi>
#define fi first
#define se second
#ifdef _WIN32
#define getchar_unlocked _getchar_nolock
#endif

int n, a, b, k;
int par[200005], sz[200005];
int getr(int x){return (par[x] == x ? x : par[x] = getr(par[x]));}

void merge(int a, int b){
	a = getr(a), b = getr(b);
	if(a == b)return;
	sz[a] += sz[b];
	par[b] = a;
}
vector <pi> stuf;
vector <pii> adj, adj2;
int ans = 1e18;
void solve(){
	cin >> n >> a >> b >> k;
  if(k == 0){
	cout << 0; return;}
	for(int i=1;i<=a;i++){
		int x, y, z; cin >> x >> y >> z;
		adj.push_back({z, {x, y}});
	}
	for(int i=1;i<=b;i++){
		int x, y, z; cin >> x >> y >> z;
		adj2.push_back({z, {x,  y}});
	}
	sort(adj.begin(), adj.end());
	sort(adj2.begin(), adj2.end());
	for(int i=1;i<=n;i++)par[i] = i, sz[i] = 1;
	stuf.push_back({0, 0});
	int cur = 0;
	for(auto i : adj){
		int w = i.fi, x = i.se.fi, y = i.se.se;
		if(getr(x) == getr(y))continue;
		cur += sz[getr(x)] * sz[getr(y)];
		if(cur >= k)ans = min(ans, w);
		merge(x, y);
		stuf.push_back({cur, w});
	}
	cur = 0;
	for(int i=1;i<=n;i++)par[i] = i, sz[i] = 1;
	for(auto i : adj2){
		int w = i.fi, x = i.se.fi, y = i.se.se;
		if(getr(x) == getr(y))continue;
		cur += sz[getr(x)] * sz[getr(y)];
		merge(x, y);
		pi bruh = {k - cur, -1};
		auto it = lower_bound(stuf.begin(), stuf.end(), bruh);
		if(it == stuf.end())continue;
		ans = min(ans, (*it).se + w);
	}
	cout << (ans == (int)1e18 ? -1 : ans);
}

main(){
	ios::sync_with_stdio(0);cin.tie(0);
	int tc = 1;
	//cin >> tc;
	for(int tc1=1;tc1<=tc;tc1++){
		// cout << "Case #" << tc1 << ": ";
		solve();
	}
}

Compilation message (stderr)

Main.cpp:66:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   66 | main(){
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...