m = read(); n = read();
f(i , 1 , n) a[i] = read();
map<int, bool> die , ak , ioi;
while(m --){
int j = read();
bool flg = 1;
map<int , bool> used;
set<int> D, T;
map<int , bool> pre = ak , pr = ioi;
while(j --){
int id = read();
int x = read() , y = read();
if(x < 1 || x > n || y < 1 || y > n || die[x] || die[y]){
flg = 0; continue;
}
if(!id){
if(a[x] != 1 || x == y || used[x] || D . find(y) != D . end() || D . find(x) != D . end())
db(1) , flg = 0;
D . insert(y);
if(a[y] == 3) T . insert(y);
}
else if(id == 1){
if(a[x] != 4 || x == y || used[x] || D . find(y) != D . end() || ak[x] || D . find(x) != D . end())
db(2) , flg = 0;
ak[x] = 1;
D . insert(y);
if(a[y] == 3) T . insert(y);
}
else if(id == 2){
if(a[x] != 4 || used[x] || D . find(y) == D . end() || ioi[x] || (x != y && D . find(x) != D . end()))
db(3) , flg = 0;
ioi[x] = 1;
D . erase(y);
T . erase(y);
}
else {
if(a[x] != 3 || x == y || T . find(x) == T . end() || D . find(y) != D . end() || D . find(x) == D . end())
db(4) , flg = 0;
D . insert(y);
if(a[y] == 3) T . insert(y);
T . erase(x);
}
used[x] = 1;
}
if(!flg || T . size()) cout << "Wrong" << '\n' , ak = pre, ioi = pr;
else{
if(D . size() == 0){
puts("Safe"); continue;
}
cout << D . size() << ' ';
for(auto p : D) cout << p << ' ' , die[p] = 1;
cout << '\n';
}
}
此题代码难度较低,且细节不多,建议降黄。