Submission #1295928

#TimeUsernameProblemLanguageResultExecution timeMemory
1295928Jawad_Akbar_JJStranded Far From Home (BOI22_island)C++20
100 / 100
246 ms29536 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
const int N = 1<<18;
long long s[N];
int er[N], n, m, Par[N];
vector<int> nei[N], cmp[N];
vector<pair<int,int>> ord;

int root(int v){
	return (Par[v] == v ? v : Par[v] = root(Par[v]));
}

int main(){
	cin>>n>>m;

	for (int i=1;i<=n;i++){
		cin>>s[i];
		ord.push_back({s[i], i});
		cmp[i] = {i};
		Par[i] = i;
	}
	sort(begin(ord), end(ord));

	for (int i=1, a, b;i<=m;i++){
		cin>>a>>b;
		if (s[a] > s[b] or (s[a] == s[b] and a > b))
			swap(a, b);
		nei[b].push_back(a);
	}

	for (auto [sz, i] : ord){
		for (int j : nei[i]){
			j = root(j);
			if (j == i)
				continue;
			if (s[j] < sz){
				for (int k : cmp[j])
					er[k] = 1;
				vector<int> ().swap(cmp[j]);
			}
			if (cmp[i].size() < cmp[j].size())
				swap(cmp[i], cmp[j]);
			for (int k : cmp[j])
				cmp[i].push_back(k);
			vector<int> ().swap(cmp[j]);
			s[i] += s[j];
			Par[j] = Par[i];
		}
	}

	for (int i=1;i<=n;i++)
		cout<<!er[i];
	cout<<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...