This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
typedef pair<int, bool> pib;
typedef long long ll;
const int inf=2e9, MX=300010;
vector<int> G[MX];
int n, m, k, e;
bool boom[MX];
vector<pib> Q;
pib in(){
int v; char c; string S;
cin>>c>>c>>v>>c>>S;
return {v, S=="BOOM"};
}
bool explode(int a, int b){
if(boom[a] || boom[b]) return true;
auto it=lower_bound(G[a].begin(), G[a].end(), b);
if(it==G[a].end() || *it!=b) return false;
else return true;
}
bool valid(int s){
for(pib p:Q){
int v; bool b; tie(v,b)=p;
if(explode(v,s)!=b) return false;
}
return true;
}
void solve1(){
for(int i=1; i<=n; i++) sort(G[i].begin(), G[i].end());
vector<int> ans;
for(int i=1; i<=n; i++) if(valid(i)) ans.push_back(i);
cout<<ans.size()<<'\n';
for(int x:ans) cout<<x<<' ';
cout<<'\n';
}
void solve2(){
int cnt[MX]={}, f=0;
for(pib p:Q){
int v; bool b; tie(v,b)=p;
if(boom[v]){ f++; continue; }
if(b) for(int x:G[v]) cnt[x]++;
else assert(false);
}
vector<int> ans;
for(int i=1; i<=n; i++){
if(boom[i] || cnt[i]==e-f) ans.push_back(i);
}
cout<<ans.size()<<'\n';
for(int x:ans) cout<<x<<' ';
cout<<'\n';
}
int main(){
ios::sync_with_stdio(0); cin.tie(0);
cin>>n>>m>>k;
for(int i=1,x ; i<=m; i++) cin>>x, boom[x]=true;
for(int i=1; i<=k; i++){
int u,v; cin>>u>>v;
G[u].push_back(v);
G[v].push_back(u);
}
cin>>e;
for(int i=1; i<=e; i++){
int v; bool b; tie(v,b)=in();
Q.push_back({v,b});
}
if(n<=1000) solve1();
else solve2();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |