长春理工大学第十四届程序设计竞赛(重现赛)L

L.Homework Stream

题目链接:https://ac.nowcoder.com/acm/contest/912/L

题目


作为大珩班尖子生,小r每天有很多作业要完成,例如工图、工图和工图。

很显然,做作业是要有顺序的。作业之间存在依赖关系,某一个作业没做完,就不能开始做另一个作业。例如,汇编作业依赖于C语言作业,因为小r可以用C语言的编译结果反编译出他想要的汇编程序。

现在已知有n种作业(编号为1~n)和m对作业之间的依赖关系,小r想知道编号为k的作业依赖于哪些作业,以及哪些作业依赖于编号为k的作业。
输入描述:

第一行输入三个正整数n,m,k(1≤n,m,k≤106)

,含义见题目描述。

接下来m行,每行两个正整数xi,yi(1≤xi,yi≤106),代表作业xi依赖于yi



输入保证不存在重复的依赖关系,也不存在环形的依赖关系。

输出描述:

输出共两行。

第一行输出编号为k的作业依赖的作业编号,每个数用空格隔开。

第二行输出依赖于编号为k的作业的编号,每个数也用空格隔开。

每行输出的作业编号顺序任意。

示例1
输入
5 4 3
3 1
3 2
4 3
5 3

输出
1 2
4 5

示例2
输入
3 2 1
2 1
3 2

输出
2

说明

如果没有依赖或被依赖的作业,也要输出空行(即必须一共输出两个换行符)

备注:

依赖关系不满足传递性,即你无需考虑间接的依赖关系。

思路

水题,判断存入数组就行

#include<bits/stdc++.h>
using namespace std;
int main()
{
 
    int n,m,k;
    vector<int>sh,ch;
    while(cin>>n>>m>>k)
    {
        int a,b;
     for(int i=0;i<m;i++)
     {
         cin>>a>>b;
         if(a==k)
             sh.push_back(b);
         else if(b==k)
             ch.push_back(a);
     }
     if(!sh.size())
         cout<<endl;
     if(sh.size())
     {
         copy(sh.begin(),sh.end(),ostream_iterator<int>(cout," "));
         cout<<endl;
     }
    if(!ch.size())
        cout<<endl;
    if(ch.size())
    {
        copy(ch.begin(),ch.end(),ostream_iterator<int>(cout," "));
        cout<<endl;
    }
    sh.clear();
    ch.clear();
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Vampire6/p/10992451.html