• BUPT复试专题—进程管理(2014网研)


    题目描述

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

    输入

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

    输出

    对于每个QUERY,如果查询的进程仍然存在则输出Yes,否则输出No。输出的大小写必须和样例一致。

    样例输入

    2
    5
    FORK 0 1
    QUERY 1
    KILL 1
    QUERY 1
    QUERY 2
    1
    QUERY 0

    样例输出

    Yes
    No
    No
    No
    Yes

    来源

    2014网研C题 

    #include<algorithm>
    #include<iostream>
    #include<cstdio>
    #include<map>
    #include<vector>
    using namespace std;
    struct tree
    {
        vector<int> i;
        int lable;
    };
    map<int,tree> donser;
    void deal(int m)
    {
        donser[m].lable=0;
        vector<int> tep=donser[m].i;
        vector<int>::iterator it;
        while(tep.size())
        {
            int a=tep.back();
            tep.pop_back();
            deal(a);
        }
        return;
    }
    int main()
    {
        int a,b;
        while(~scanf("%d",&a)) 
        {
            while(a--)
            {
                cin>>b;
                while(b--)
                {
                    string temp;
                    cin>>temp;
                    donser[0].lable=1;
                    if(temp[0]=='F')
                    {
                        int m,n;
                        cin>>m>>n;
                        donser[m].i.push_back(n);
                        donser[m].lable=1;
                        donser[n].lable=1;
                    }
                    else if(temp[0]=='Q')
                    {
                        int m;
                        cin>>m;
                        if(donser[m].lable==1)
                            cout<<"Yes"<<endl;
                        else 
                            cout<<"No"<<endl;
                    }
                    else if(temp[0]=='K')
                    {
                        int m;
                        cin>>m;
                        deal(m);
                    }
                }
                donser.clear();
                donser[0].lable=1;
            }    
        }
        return 0;
    }
  • 相关阅读:
    简单使用GDB
    【老人孟岩经验谈】如何学习一本新的编程语言
    【做存档】如何争取到真正有用的人脉?
    回头来看C语言里的static
    Spring MVC 教程,快速入门,深入分析[1220]
    eclipse ibabis代码生成插件abator功能扩展
    在MyEclipse中配置Tomcat服务器
    将远程调试的控制台信息输出至Eclipse
    LOG4J.PROPERTIES配置详解
    java Map 怎么遍历
  • 原文地址:https://www.cnblogs.com/dzzy/p/8645521.html
Copyright © 2020-2023  润新知