제출 #1217323

#제출 시각아이디문제언어결과실행 시간메모리
1217323Muhammad_AneeqStranded Far From Home (BOI22_island)C++20
0 / 100
32 ms9148 KiB
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define int long long
int const N=1e5+10;
vector<int>nei[N];
int a[N]={},par[N]={},sz[N]={};
bool dead[N]={};
int root(int n)
{
	return (par[n]==n?n:(par[n]=root(par[n])));
}
void merge(int a,int b)
{
	a=root(a);
	b=root(b);
	if (a==b)
		return;
	par[b]=a;
	sz[a]+=sz[b];
}
inline void solve()
{
	int n,m;
	cin>>n>>m;
	vector<pair<int,int>>vl;
	for (int i=1;i<=n;i++)
	{
		cin>>a[i];
		par[i]=i;
		sz[i]=a[i];
		vl.push_back({a[i],i});
	}
	sort(begin(vl),end(vl));
	for (int i=0;i<m;i++)
	{
		int u,v;
		cin>>u>>v;
		nei[u].push_back(v);
		nei[v].push_back(u);
	}
	for (int i=0;i<n;i++)
	{
		int j=i;
		vector<int>cur;
		while (j<n&&vl[j].first==vl[i].first)
		{
			cur.push_back(vl[j].second);
			j++;
		}
		j--;
		int val=vl[i].first;
		for (auto i:cur)
		{
			for (auto j:nei[i])
			{
				if (a[j]<=val)
				{
					int u=root(i),v=root(j);
					if (u==v||dead[v]) continue;
					if (sz[v]<sz[u])
					{
						dead[v]=1;
						sz[u]+=sz[v];
						continue;
					}
					merge(u,v);
				}
			}
		}
	}
	for (int i=1;i<=n;i++)
	{
		if (dead[root(i)])
			cout<<'0';
		else
			cout<<'1';
	}
	cout<<endl;
}
signed main()
{
    ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    int t=1;
    for (int i=1;i<=t;i++)
    {
        solve();
    }
}
#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...