#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define pb push_back
#define vll vector<ll>
#define pll pair<ll, ll>
typedef long long ll;
namespace{
const ll inf=1e18;
const ll mxN=2005;
ll n, m;
bool done[mxN];
vll adj[mxN];
vector<pll> edges[mxN];
bool visited[mxN];
ll siz[mxN];
ll r[mxN];
void dfs(ll cur);
void add_edge(ll x, ll y){
adj[x].pb(y);
adj[y].pb(x);
if(visited[x] && !visited[y]){
dfs(y);
}
else if(visited[y] && !visited[x]){
dfs(x);
}
}
void dfs(ll cur){
if(visited[cur]) return;
visited[cur]=1;
if(!done[r[cur]]){
done[r[cur]]=1;
for(auto &it:edges[r[cur]]){
add_edge(it.F, it.S);
}
}
for(auto &it:adj[cur]){
dfs(it);
}
}
}
vector<int> find_reachable(vector<int> R, vector<int> u, vector<int> v, vector<int> c) {
n=R.size();
for(ll i=0;i<n;i++){
r[i]=R[i];
}
m=u.size();
for(ll i=0;i<m;i++){
edges[c[i]].pb({u[i], v[i]});
}
for(ll i=0;i<n;i++){
siz[i]=0;
memset(done, 0, sizeof(done));
for(ll j=0;j<n;j++){
adj[j].clear();
}
memset(visited, 0, sizeof(visited));
dfs(i);
for(ll j=0;j<n;j++){
if(visited[j]) siz[i]++;
}
}
ll mn=inf;
for(ll i=0;i<n;i++){
mn=min(mn, siz[i]);
}
vector<int> re(n);
for(ll i=0;i<n;i++){
if(mn==siz[i]){
re[i]=1;
}
}
return re;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |