Submission #1245652

#TimeUsernameProblemLanguageResultExecution timeMemory
1245652YassirSalama나일강 (IOI24_nile)C++20
23 / 100
2095 ms20724 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(); for(int i = 0;i+1<n;i++){ if((v[i+1][0]-v[i][0])<=d){ //merge these two merge(i,i+1); } } 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 = 1e18; for(auto x : c){ mn = min(mn,(ll)-v[x][2]+(ll)v[x][1]); 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...