Submission #1217347

#TimeUsernameProblemLanguageResultExecution timeMemory
1217347MuhammadSaramStranded Far From Home (BOI22_island)C++20
0 / 100
222 ms47760 KiB
#include <bits/stdc++.h>

using namespace std;

const int M = 2e5 +1;

int a[M],col[M],sm[M];
vector<int> ver[M],pos[M];

void add(int u,int v)
{
	u=col[u],v=col[v];
	if (u==v) return;
	if (ver[u].size()<ver[v].size()) swap(u,v);
	for (int i:ver[v])
		col[i]=u,ver[u].push_back(i);
	for (int i:pos[v])
		pos[u].push_back(i);
	sm[u]+=sm[v];
	ver[v].clear();
	pos[v].clear();
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(NULL), cout.tie(NULL);
	
	int n,m;
	cin>>n>>m;
	for (int i=1;i<=n;i++)
		cin>>a[i],col[i]=i,ver[i]=pos[i]={i},sm[i]=a[i];
	map<int,vector<pair<int,int>>> mp;
	for (int i=0;i<m;i++)
	{
		int u,v;
		cin>>u>>v;
		if (a[u]>a[v]) swap(u,v);
		mp[a[v]].push_back({u,v});
	}
	for (auto [i,edg]:mp)
	{
		for (auto [u,v]:edg)
			if (i>sm[col[u]])
				pos[col[u]].clear();
		for (auto [u,v]:edg)
			pos[col[u]].push_back(v),add(u,v);
	}
	string ans(n,'0');
	for (int i=1;i<=n;i++)
		if (col[i]==i)
			for (int u:pos[i])
				ans[u-1]='1';
	cout<<ans<<endl;
	
	return 0;
}
#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...