제출 #1155071

#제출 시각아이디문제언어결과실행 시간메모리
1155071NAMIN나일강 (IOI24_nile)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
#include "nile.h"

using namespace std;

#define ll long long

vector<ll> S,parent,mn_g;

int find(int node){
	if(parent[node] == node)
		return node;
	return parent[node] = find(parent[node]);
}

void unite(int a,int b){
	a = find(a),b = find(b);
	parent[b] = parent[a];
	S[a] += S[b];
	mn_g[a] = min(mn_g[a],mn_g[b]);
}

vector<ll> calculate_costs(vector<int> W,vector<int> A,vector<int> B,vector<int> E){
	
	int n = W.size();
	S.assign(W.size(),1);
	parent.assign(W.size(),0);
	mn_g.assign(W.size(),1e18);
	
	vector<pair<int,int>> w;

	for(int i=0;i<n;i++){
		parent[i] = i;
	}
	for(int i=0;i<n;i++){
		mn_g[i] = A[i]-B[i];
		w.push_back(make_pair(W[i],i));
	}

	vector<pair<int,ll>> possAns; // D,ans
	ll cur_ans = 0;
	ll sum_mn = 0;
	for(int i=0;i<n;i++){
		cur_ans += B[i];
		sum_mn += mn_g[i];
	}
	possAns.push_back(make_pair(-1,cur_ans+sum_mn));
	vector<pair<int,pair<int,int>>> process;
	sort(w.begin(),w.end());
	for(int i=0;i<n-1;i++){
		int a = w[i].second,b = w[i+1].second;
		process.push_back(make_pair(w[i+1].first-w[i].first,
						make_pair(a,b)));
	}
	sort(process.begin(),process.end());
	
	for(auto p_cur : process){
		int a = find(p_cur.second.first),b = find(p_cur.second.second);
		int d = p_cur.first;
		if(S[a]%2 == 1 && S[b]%2 == 0){
			sum_mn -= mn_g[a];
			sum_mn += min(mn_g[a],mn_g[b]);
		}
		else if(S[a]%2 == 0 && S[b]%2 == 1){
			sum_mn -= mn_g[b];
			sum_mn += min(mn_g[a],mn_g[b]);
		}
		else if(S[a]%2 == 1 && S[b]%2 == 1){
			sum_mn -= mn_g[b]+mn_g[a];
		}
		unite(a,b);
		possAns.push_back(make_pair(d,cur_ans+sum_mn));
	}
	vector<pair<int,int>> defAns;
	for(int i=0;i<possAns.size();i++){
		ll mn = possAns[i].second;
		while(i+1 < n && possAns[i].first == possAns[i+1].first){
			mn = min(mn,possAns[i+1].second);
			i++;
		}
		defAns.push_back(make_pair(i,mn));
	}
	
	vector<ll> ans;
	for(int i=0;i<(int)E.size();i++){
		int d = E[i];
		auto it = upper_bound(defAns.begin(),def.end(),make_pair(d,(ll)1e18));
		it--;
		pair<int,ll> p = *it;
		ans.push_back(p.second);
	}
	return ans;
}


컴파일 시 표준 에러 (stderr) 메시지

nile.cpp: In function 'std::vector<long long int> calculate_costs(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
nile.cpp:87:54: error: 'def' was not declared in this scope
   87 |                 auto it = upper_bound(defAns.begin(),def.end(),make_pair(d,(ll)1e18));
      |                                                      ^~~