Submission #1203837

#TimeUsernameProblemLanguageResultExecution timeMemory
1203837simona1230Keys (IOI21_keys)C++20
0 / 100
8 ms14404 KiB
#include <bits/stdc++.h>
#include "keys.h"
using namespace std;
const int maxn=3*1e5+5;

int k[maxn];
vector<pair<int,int> > v[maxn];
vector<int> e[maxn],u,ans;
int cnt,minn,used[maxn],act[maxn];

void bfs(int s)
{
    queue<int> q;
    q.push(s);
    used[s]=1;
    while(q.size())
    {
        cnt++;
        int f=q.front();
        q.pop();

        u.push_back(f);
        act[k[f]]=1;
        for(int i=0;i<e[k[f]].size();i++)
        {
            int nb=e[k[f]][i];
            if(!used[nb])
            {
                used[nb]=1;
                q.push(nb);
            }
        }
        e[k[f]].clear();

        for(int i=0;i<v[f].size();i++)
        {
            pair<int,int> nb=v[f][i];
            if(used[nb.first])continue;

            if(act[nb.second])
            {
                used[nb.first]=1;
                q.push(nb.first);
            }
            else
            {
                u.push_back(nb.second);
                e[nb.second].push_back(nb.first);
            }
        }
    }

    for(int i=0;i<u.size();i++)
    {
        int j=u[i];
        used[j]=act[j]=0;
        e[j].clear();
    }
    if(cnt<minn)
    {
        minn=cnt;
        ans={s};
    }
    else if(cnt==minn)ans.push_back(s);

    u.clear();
    cnt=0;
}

std::vector<int> find_reachable(std::vector<int> R, std::vector<int> U, std::vector<int> V, std::vector<int> C)
{
    minn=R.size();

    for(int i=0;i<R.size();i++)
    {
        k[i]=R[i];
    }

    for(int i=0;i<U.size();i++)
    {
        v[U[i]].push_back({V[i],C[i]});
        v[V[i]].push_back({U[i],C[i]});
    }

    for(int i=0;i<R.size();i++)
        bfs(i);

    vector<int> h(R.size());
    for(int i=0;i<ans.size();i++)
        h[ans[i]]=1;

    return h;
}
#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...