【1146】Topological Order (25分)【拓扑排序】

简介: 【1146】Topological Order (25分)【拓扑排序】【1146】Topological Order (25分)【拓扑排序】
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
using namespace std;  
//如果当前的结点入度≠0则不是拓扑序列,如果为0则将它能到达的结点的入度-1
//一定要注意多个for循环的循环变量i不能写混乱,可以为i、ii、iii
int main(){   
  int n,m;//点数n  边数m
  vector<int> v[1010];
  scanf("%d %d",&n,&m);
  int in[1000+1]={0};
  int a,b;
  //用邻接表保存这个图
  for(int i=0;i<m;i++){
    scanf("%d %d",&a,&b);
    v[a].push_back(b);//a指向b结点
    in[b]++;//b结点的入度+1
  }
  int k;
  scanf("%d",&k);//k次查询
  bool space=false;//是否输出空格
  for(int i=0;i<k;i++){
    int A[1010];
    for(int ii=0;ii<n;ii++)
      scanf("%d",&A[ii]);//读入一次查询的拓扑序列
    vector<int>temp(in,in+n+1);
    for(int iii=0;iii<n;iii++)
      if(temp[A[iii]]!=0){//当前入度不为0,则非拓扑序列
        printf("%s%d",space?" ":"",i);
        space=true;
        break;
      }else{//入度为0
        for(int j:v[A[iii]])//遍历能到达的结点并将入度-1
          --temp[j];
      }
  }
  system("pause");
    return 0;   
}
相关文章
|
存储 人工智能 算法
区间分组的解法
区间分组的解法
|
存储
L2-031 深入虎穴 (25 分)(bfs)
L2-031 深入虎穴 (25 分)(bfs)
184 0
L2-031 深入虎穴 (25 分)(bfs)
L3-008 喊山 (30 分)(bfs)
L3-008 喊山 (30 分)(bfs)
86 0
L3-008 喊山 (30 分)(bfs)
LeetCode 1103. 分糖果 II Distribute Candies to People
LeetCode 1103. 分糖果 II Distribute Candies to People
【CCCC】L3-031 千手观音 (30分) ,离散化,拓扑排序,链式前向星
【CCCC】L3-031 千手观音 (30分) ,离散化,拓扑排序,链式前向星
251 0
【CCCC】L2-024 部落 (25分),并查集,统计集合个数
【CCCC】L2-024 部落 (25分),并查集,统计集合个数
94 0
|
安全
【CCCC】L3-017 森森快递 (30分),线段树rmq模板+贪心排序
【CCCC】L3-017 森森快递 (30分),线段树rmq模板+贪心排序
174 0
CF1573C. Book(拓扑排序 最长路)
CF1573C. Book(拓扑排序 最长路)
98 0
L2-017 人以群分 (25 分)(sort)
L2-017 人以群分 (25 分)(sort)
120 0
|
测试技术
1004 成绩排名 (20 分)(sort)
1004 成绩排名 (20 分)(sort)
90 0