PAT 1146 Topological Order[难]

1146 Topological Order (25 分)

This is a problem given in the Graduate Entrance Exam in 2018: Which of the following is NOT a topological order obtained from the given directed graph? Now you are supposed to write a program to test each of the options.

Input Specification:

Each input file contains one test case. For each case, the first line gives two positive integers N (≤ 1,000), the number of vertices in the graph, and M (≤ 10,000), the number of directed edges. Then M lines follow, each gives the start and the end vertices of an edge. The vertices are numbered from 1 to N. After the graph, there is another positive integer K (≤ 100). Then K lines of query follow, each gives a permutation of all the vertices. All the numbers in a line are separated by a space.

Output Specification:

Print in a line all the indices of queries which correspond to "NOT a topological order". The indices start from zero. All the numbers are separated by a space, and there must no extra space at the beginning or the end of the line. It is graranteed that there is at least one answer.

Sample Input:

6 8
1 2
1 3
5 2
5 4
2 3
2 6
3 4
6 4
5
1 5 2 3 6 4
5 1 2 6 3 4
5 1 2 3 6 4
5 2 1 6 3 4
1 2 3 4 5 6

Sample Output:

3 4

题目大意:给出一个有向图,并且给定K个序列,判断这个序列是否是拓扑序列。

//我一看见我想的就是,得用邻接表存储图,然后对每一个输入的序列,都进行判断,基本上复杂度是非常高的,就是对每一个序列中的数,判断其之前出现的每一个数是否是它的next,这样来判断,然后写的不对。

#include <iostream>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;

vector<vector<int>> graph;
int main(){
    int n,m;
    cin>>n>>m;
    graph.resize(n+1);
    int f,t;
    for(int i=0;i<m;i++){
        cin>>f>>t;
        graph[f].push_back(t);//因为是单向图
    }
    int u;
    cin>>u;
    vector<int> vt(n);
    vector<int> ans;
    for(int i=0;i<u;i++){//复杂度是O(n^2),稍微有点高啊。
        for(int j=0;j<n;j++)
            cin>>vt[j];
        //检查在其之前出现的是否是在这个图的next里。
        bool flag=true;
        for(int j=1;j<n;j++){
            for(int k=0;k<j;k++){//在这还得遍历vt[j]
                for(int v=0;v<graph[j].size();v++){
                    if(vt[k]==graph[j][v]){
                        cout<<vt[k]<<" "<<graph[j][v]<<"\n";
                        ans.push_back(i);
                        flag=false;
                        break;
                    }
                }
            if(!flag)break;
            }
            if(!flag)break;
        }
    }
    for(int i=0;i<ans.size();i++){
        cout<<ans[i];
        if(i!=ans.size()-1)cout<<‘ ‘;
    }

    return 0;
}

结果:

//真的很奔溃啊,怎么每个都是不对的,那个2 2 到底是什么意思?我明天再看看吧。

//柳神的代码:

//根据入度出度来判断,非常可以了。。

学习了,要多复习。

原文地址:https://www.cnblogs.com/BlueBlueSea/p/9873192.html

时间: 2024-08-29 12:16:37

PAT 1146 Topological Order[难]的相关文章

PAT 1146 Topological Order

This is a problem given in the Graduate Entrance Exam in 2018: Which of the following is NOT a topological order obtained from the given directed graph? Now you are supposed to write a program to test each of the options. Input Specification: Each in

1146 Topological Order (25 分)判断拓扑序列

1146 Topological Order (25 分) This is a problem given in the Graduate Entrance Exam in 2018: Which of the following is NOT a topological order obtained from the given directed graph? Now you are supposed to write a program to test each of the options

PAT甲级——1146 Topological Order (25分)

This is a problem given in the Graduate Entrance Exam in 2018: Which of the following is NOT a topological order obtained from the given directed graph? Now you are supposed to write a program to test each of the options. Input Specification: Each in

PAT Advanced 1146 Topological Order (25) [拓扑排序]

题目 This is a problem given in the Graduate Entrance Exam in 2018: Which of the following is NOT a topological order obtained from the given directed graph? Now you are supposed to write a program to test each of the options. Input Specification: Each

PAT 1103 Integer Factorization[难]

1103 Integer Factorization(30 分) The K?P factorization of a positive integer N is to write N as the sum of the P-th power of K positive integers. You are supposed to write a program to find the K?P factorization of N for any positive integers N, K an

1141 PAT Ranking of Institutions[难]

1141 PAT Ranking of Institutions (25 分) After each PAT, the PAT Center will announce the ranking of institutions based on their students' performances. Now you are asked to generate the ranklist. Input Specification: Each input file contains one test

拓扑排序(Topological Order)UVa10305 Ordering Tasks

2016/5/19 17:39:07 拓扑排序,是对有向无环图(Directed Acylic Graph , DAG )进行的一种操作,这种操作是将DAG中的所有顶点排成一个线性序列,使得图中的任意一对顶点u,v满足如下条件: 若边(u,v)∈E(G),则在最终的线性序列中出现在v的前面 好了,说人话:拓扑排序的应用常常和AOV网相联系,在一个大型的工程中,某些项目不是独立于其他项目的,这意味着这种非独立的项目的完成必须依赖与其它项目的完成而完成,不妨记为u,v,则若边(u,v)∈E(G),代

PAT 1049 Counting Ones [难]

1049 Counting Ones (30 分) The task is simple: given any positive integer N, you are supposed to count the total number of 1's in the decimal form of the integers from 1 to N. For example, given N being 12, there are five 1's in 1, 10, 11, and 12. Inp

PAT 1091 Acute Stroke [难][bfs]

1091 Acute Stroke (30 分) One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the results of image analysis in which the core regions are identified in each MRI slice, your job is to calculate the volume of th