Submission #1245662

#TimeUsernameProblemLanguageResultExecution timeMemory
1245662YassirSalamaNile (IOI24_nile)C++20
6 / 100
85 ms17652 KiB
#include "nile.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define all(v) v.begin(),v.end()
const int maxn = 1e5+100;
int par[maxn];
vector<int> a,b,w;
void init(){
	for(int i = 0;i<maxn;i++){
		par[i] = i;
	}
}
int find(int node){
	return node==par[node]?node:par[node] = find(par[node]);
}
void merge(int a,int b){
	a = find(a);
	b = find(b);
	if(a==b) return;
	par[b] = a;
}

vector<ll> calculate_costs(vector<int> W, vector<int> A,vector<int> B, vector<int> E) {
	a = A;
	b = B;
	w = W;
	vector<vector<ll>> v;
	int n = w.size();
	for(int i = 0;i<n;i++){
		v.pb({(ll)w[i],(ll)a[i],(ll)b[i]});
	}
	vector<ll> ans;
	sort(all(v));
	for(auto d : E){
		init();
		int i = 0;
		int j = 0;
		while(i<n) {
			j = i;
			while(j<n&&abs(v[i][0]-v[j][0])<=d){
				merge(i,j);
				j++;
			}
			i = j;
		}
		map<int,vector<int>> mp;
		for(int i = 0;i<n;i++){
			mp[find(i)].pb(i);
		}
		ll sum = 0;
		#define F first
		#define S second
		for(auto x : mp){
			vector<int> c = x.S;
			if(c.size()%2==0){
				for(auto x : c){
					sum+=(ll)v[x][2];
				}
			}else{
				ll mn = (ll)1e9;
				for(auto x : c){
					mn = min(mn,v[x][1]-(ll)v[x][2]);
					sum = (sum+(ll)v[x][2]);
				}
				sum+=mn;
			}
		}
		ans.pb(sum);
	}
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...