#include <iostream>
#include <cstdio>
#include <map>
#include <vector>
using namespace std;
map<int, vector<int> > M;
vector<int> chains[100];
int proIdx = 0;
void killPro(vector<int> v, int n) {
if (v.size() == 0) {
map<int, vector<int> >::iterator itor = M.find(n);
M.erase(itor);
} else {
for (int i = 0; i < v.size(); ++i) killPro(M[v[i]], v[i]);
}
return;
}
int main(int argc, char** argv) {
int T;
scanf("%d", &T);
while (T--) {
int N;
scanf("%d", &N);
for (int i = 0; i < N; ++i) chains[i].clear();
M.clear();
M[0] = chains[0];
proIdx = 0;
char opt[10];
while (N--) {
scanf("%s", opt);
string optStr = opt;
if (optStr == "FORK") { //FORK PID1,PID2
int PID1, PID2;
scanf("%d%d", &PID1, &PID2);
M[PID1].push_back(PID2);
if (M.find(PID2) == M.end()) M[PID2] = chains[++proIdx];
} else if (optStr == "KILL") { //KILL PID
int PID;
scanf("%d", &PID);
map<int, vector<int> >::iterator itor = M.find(PID);
if (itor != M.end()) killPro(M[PID], PID);
} else { //QUERY PID
int PID;
scanf("%d", &PID);
if (M.find(PID) == M.end()) printf("No\n");
else printf("Yes\n");
}
}
}
return 0;
}
301. 进程管理-网研14
最新推荐文章于 2020-03-25 21:27:29 发布