Submission #1295922

#TimeUsernameProblemLanguageResultExecution timeMemory
1295922Jawad_Akbar_JJStranded Far From Home (BOI22_island)C++20
10 / 100
602 ms589824 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
const int N = 1<<18;
#define int long long
int Sz[N], Par[N], er[N], lst, n, m;
vector<int> cmp[N];
vector<pair<int, pair<int, int>>> E;

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

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

	for (int i=1;i<=n;i++){
		cin>>Sz[i], Par[i] = i;
		cmp[i].push_back(i);
	}

	for (int i=1, a, b;i<=m;i++){
		cin>>a>>b;
		if (Sz[a] < Sz[b])
			swap(a, b);
		E.push_back({Sz[a], {a, b}});
	}
	sort(begin(E), end(E));

	for (auto [p, ab] : E){
		auto [a, b] = ab;
		int A = root(a), B = root(b);
		if (A == B)
			continue;

		if (Sz[B] < p){
			for (int i : cmp[B])
				er[i] = 1;
			cmp[B].clear();
		}
		Par[B] = A;
		Sz[A] += Sz[B];

		if (cmp[A].size() > cmp[B].size())
			swap(cmp[A], cmp[B]);
		for (int i : cmp[B])
			cmp[A].push_back(i);
	}
	for (int i=1;i<=n;i++)
		cout<<!er[i];
	cout<<'\n';
}
#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...