제출 #1356632

#제출 시각아이디문제언어결과실행 시간메모리
1356632MuhammadSaram열쇠 (IOI21_keys)C++17
37 / 100
55 ms8776 KiB
#include <bits/stdc++.h>

using namespace std;

const int M = 2001;

vector<pair<int,int>> nei[M];
vector<int> edg[M], r;
bool ad[M], vis[M];
int cnt;

void f(int c);

void add(int u)
{
	if (vis[u]) return;
	cnt++, vis[u]=1;
	if (!ad[r[u]])
		f(r[u]);
	for (auto [x,o]:nei[u])
		if (ad[o])
			add(x);
		else
			edg[o].push_back(x);
}

void f(int c)
{
	ad[c]=1;
	while (edg[c].size())
		add(edg[c].back()), edg[c].pop_back();
}

vector<int> find_reachable(vector<int> R, vector<int> u, vector<int> v, vector<int> c)
{
	r=R;
	int n=r.size();
	for (int i=0;i<u.size();i++)
		nei[u[i]].push_back({v[i],c[i]}),
		nei[v[i]].push_back({u[i],c[i]});
	vector<int> ans(n);
	int mn=n;
	for (int i=0;i<n;i++)
	{
		for (int j=0;j<n;j++) edg[j].clear(), ad[j]=vis[j]=0;
		for (auto [x,o]:nei[i])
			edg[o].push_back(x);
		vis[i]=1, cnt=1;
		f(r[i]);
		ans[i]=cnt, mn=min(mn,cnt);
	}
	for (int i=0;i<n;i++)
		ans[i]=(ans[i]==mn);
	return ans;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…