제출 #72534

#제출 시각아이디문제언어결과실행 시간메모리
72534IDxTree (#118)초코쿠키 기계 (FXCUP3_chocolate)C++17
83 / 100
1054 ms27240 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...