2014.网研院.Problem C. 进程管理

末蓝、 2023-05-28 11:11 66阅读 0赞

题目描述
在操作系统中,进程管理是非常重要的工作,每个进程都有唯一的进程标识(PID)。每个进程都可以启动子进程,此时我们称它为其子进程的父进程,除了PID为0的进程之外,每个进程有且只有一个父进程,在这个任务中,你需要实时维护操作系统运行中的三个基本操作:
1.FORK PID1 PID2:标识为PID1的进程启动了一个标识为PID2的子进程。
2.KILL PID:结束标识为PID的进程。请注意,与此同时所有PID的子进程也将同时结束。如果PID是不存在或已经结束的进程,则不做任何操作。
3.QUERY PID:查询标识为PID的进程是否仍然存在。
在初始状态下,系统只开启了PID为0的进程,并且在任何情况下该进程不会结束。

输入格式
输入的第一行是一个整数T(T<=50),表示输入的数据组数。
每组测试数据的第一行是一个整数N(1<=N<=100),表示操作的数量。
没下来N行,每行按照上面的描述给出每个操作,输入保证所有的进程的PID都不相同,且一个进程结束后不会被重新启动,所有PID都是[1,100]之间的整数。
输出格式

对于每次QUERY查询,如果进程存在,输出Yes,不存在则输出No

输入样例

  1. 2
  2. 5
  3. FORK 0 1
  4. QUERY 1
  5. KILL 1
  6. QUERY 1
  7. QUERY 2
  8. 1
  9. QUERY 0

输出样例

  1. Yes
  2. No
  3. No
  4. Yes
  5. #include<bits/stdc++.h>
  6. using namespace std;
  7. int p[105];
  8. void kill(int a) {
  9. p[a]=-1;
  10. for(int i=0; i<105; i++) {
  11. if(p[i]==a&&a!=i) {
  12. kill(i);
  13. }
  14. }
  15. }
  16. int main() {
  17. int T,N,a,b,flag;
  18. string s;
  19. while(cin>>T) {
  20. while(T--) {
  21. memset(p,-1,sizeof(p));
  22. p[0]=0;
  23. cin>>N;
  24. while(N--) {
  25. cin>>s;
  26. flag=0;
  27. if(s=="FORK") {
  28. cin>>a>>b;//相当于a是b的父节点
  29. p[b]=a;
  30. } else if(s=="KILL") {
  31. cin>>a;
  32. kill(a);
  33. } else {
  34. cin>>a;
  35. for(int i=0; i<105; i++) {
  36. if(p[i]==a||p[a]!=-1) {
  37. flag=1;
  38. }
  39. }
  40. if(flag==1||a==0) {
  41. cout<<"Yes\n";
  42. } else {
  43. cout<<"No\n";
  44. }
  45. }
  46. }
  47. }
  48. }
  49. }

发表评论

表情:
评论列表 (有 0 条评论,66人围观)

还没有评论,来说两句吧...

相关阅读

    相关 2014..Problem C. 进程管理

    题目描述 在操作系统中,进程管理是非常重要的工作,每个进程都有唯一的进程标识(PID)。每个进程都可以启动子进程,此时我们称它为其子进程的父进程,除了PID为0的进程之外,

    相关 2014..Problem B. 最小堆

    题目描述 给定一棵带权二叉树,请判断它是不是一个最小堆。 一棵二叉树是一个最小堆,当且仅当对于树上任意一个节点,它的权值都小于或等于以它为根的子树中的所有权值。 输入

    相关 2014..Problem D. 网络传输

    题目描述 网络的高效互联与智能传输是提升海量用户服务请求映射效率的重要措施。在这个任务中,你要用最少的传输时间,将特定的数据源发送到指定的网络节点中。 我么给定的网络一