Online Course in BSU - 770C - Codeforces

#include <bits/stdc++.h>
using namespace std;
const int BIG_N=100001;
deque<int> ans,ret;
vector<vector<int>> adj(BIG_N);

bool dfs(vector<bool>& look,vector<int>& vu,int node){
if (adj[node].empty()) return true;
for (auto& i:adj[node]){
if (vu[i] <= 1){
ans.emplace_back(i);
vu[i]++;
if (dfs(look,vu,i)) return true;
}
else if (look[i]) return true;
else return false;
}
return false;
}

int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,k;
cin >> n >> k;
vector<int> v(k);
for (int i=0; i<k; ++i) cin >> v[i];
for (int i=1; i<=n; ++i){
int t;
cin >> t;
for (int j=0; j<t; ++j){
int a;
cin >> a;
adj[i].emplace_back(a);
}
}
vector<int> vu(n+1);
vector<bool> look(n+1);
for (auto& i:v){
bool ok=true;
if (!vu[i]){
ok=dfs(look,vu,i);
ans.emplace_back(i);
}
if (!ok){
cout << -1;
return 0;
}
else{
for (auto& i:ans) look[i]=true;
reverse(ans.begin(),ans.end());
for (auto& i:ans) ret.emplace_back(i);
ans.clear();
}
}
cout << ret.size() << '\n';
for (auto& i:ret) cout << i << ' ';
return 0;

}

Comments

Popular posts from this blog

Kickstart - 2019 - Round A - Parcels

Codeforces 510C