제출 #123056

#제출 시각아이디문제언어결과실행 시간메모리
123056mechfrog88Lightning Rod (NOI18_lightningrod)C++14
40 / 100
2058 ms262144 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#pragma GCC optimize("unroll-loops,no-stack-protector")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
 
using namespace __gnu_pbds;
using namespace std;
 
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
 
typedef long long ll;
typedef long double ld;	


vector <ll> id;

ll find(ll i){
	if (id[i] <= -1) return i;
	return id[i] = find(id[i]); 
}

void unio(ll i,ll j){
	ll a = find(i);
	ll b = find(j);
	if (a == b) return;
	id[a] += id[b];
	id[b] = a;
}

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	ll n;
	cin >> n;
	vector <pair<ll,ll>> arr(n);
	id.resize(n,-1);
	for (int z=0;z<n;z++){
		cin >> arr[z].first >> arr[z].second;
	}
	for (int z=0;z<n;z++){
		if (id[z] >= 0) continue;
		ll x1 = arr[z].first-arr[z].second;
		ll x2 = arr[z].first+arr[z].second;
		for (int x=0;x<n;x++){
			if (id[x] >= 0) continue;
			ll x3 = arr[x].first-arr[x].second;
			ll x4 = arr[x].first+arr[x].second;
			if ((x1 <= x3 && x4 <= x2)){
				if (id[x] >= 0) continue;
				unio(z,x);
			}
		}
	}
	ll ans = 0;
	for (int z=0;z<n;z++){
		if (id[z] < 0) ans++;
	}
	cout << ans << endl;
}
#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...