当前位置: 首页 > news >正文

【拓扑】1639.拓扑排序

题目描述

这是 2018 2018 2018 年研究生入学考试中给出的一个问题:

以下哪个选项不是从给定的有向图中获得的拓扑序列?

现在,请你编写一个程序来测试每个选项。

5d35ed2a-4d19-4f13-bf3f-35ed59cebf05.jpg

输入格式

第一行包含两个整数 N N N M M M,分别表示有向图的点和边的数量。

接下来 M M M 行,每行给出一条边的起点和终点。

点的编号从 1 1 1 N N N

再一行包含一个整数 K K K,表示询问次数。

接下来 K K K 行,每行包含一个所有点的排列。

一行中的数字用空格隔开。

输出格式

在一行中输出所有不是拓扑序列的询问序列的编号。

询问序列编号从 0 0 0 开始。

行首和行尾不得有多余空格,保证存在至少一个解。

数据范围

1 ≤ N ≤ 1000 1 \le N \le 1000 1N1000,
1 ≤ M ≤ 10000 1 \le M \le 10000 1M10000,
1 ≤ K ≤ 100 1 \le K \le 100 1K100

输入样例:
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
输出样例:
3 4

伪拓扑排序

根据序列删除结点判断下一个结点的入度是否为0

  • 为 0 代表满足
  • 不为 0 代表不满足条件
    注意这里需要使用备份度数数组来参与每次的拓扑计算
C++ 代码
/*
根据序列删除结点判断下一个结点的入度是否为0为0 代表满足不为0 代表不满足条件
*/
#include<bits/stdc++.h>
using namespace std;
const int N = 1010, M = 10010;
int h[N],e[2*M],ne[2*M],idx;
int n,m,k;
int d[N]; // 入度
int back_d[N]; // 度数数组的备份
vector<int> temp;// 临时数组// 加边
void add(int a,int b){e[idx]=b; // 点ne[idx]=h[a]; // 边h[a]=idx++; // 指针
}// 伪拓扑排序(拿back_d去做)
bool topsort(){for(int idx=0;idx<n;idx++){// 判断当前结点的入度是否为0int cur = temp[idx];// 按序入度不为0if(back_d[cur] != 0) return false;// 削邻度for(int i=h[cur];~i;i=ne[i]){int j=e[i];// 邻居的入度必须要大于0if(back_d[j] > 0) --back_d[j];}}return true;
}int main(){cin>>n>>m;// 差点又忘了初始化h数组memset(h,-1,sizeof h);while(m--){int x,y;cin>>x>>y;add(x,y);d[y]++;}cin>>k;for(int cnt = 0 ; cnt < k ; cnt++){// 清空临时数组temp.clear(); // 或者temp.assign({})for(int i=1;i<=n;i++){int t;cin>>t;temp.push_back(t);}// 恢复度数数组// 或者 memcpy(back_d, d, n * sizeof(int)); memcpy(目标,源头,大小)for(int i=0;i<n;i++){back_d[i]=d[i];}// 拓扑排序bool ans = topsort();if(!ans){cout << cnt << " ";}}return 0;
}

相关文章:

  • NFT 市场开发:基于 Ethereum 和 IPFS 构建去中心化平台
  • 美业破局:AI智能体如何用数据重塑战略决策(5/6)
  • AI基础认知
  • 电网“逆流”怎么办?如何实现分布式光伏发电全部自发自用?
  • WPF可拖拽ListView
  • Android SharedFlow 详解
  • video-audio-extractor【源码版】
  • 从OSI到TCP/IP:网络协议的演变与作用
  • 设计模式-迪米特法则
  • 3D视觉重构工业智造:解码迁移科技如何用“硬核之眼“重塑生产节拍
  • Doris查询Hive数据:实现高效跨数据源分析的实践指南
  • hive 3集成Iceberg 1.7中的Java版本问题
  • Duix.HeyGem:以“离线+开源”重构数字人创作生态
  • 大数据学习(128)-数据分析实例
  • 【网络安全】漏洞分析:阿帕奇漏洞学习
  • 大数据学习(129)-Hive数据分析
  • 【Web应用】若依框架:基础篇14 源码阅读-后端代码分析-课程管理模块前后端代码分析
  • 设计模式杂谈-模板设计模式
  • 容器化实施:Docker容器构建与优化深度剖析
  • (2025)Windows修改JupyterNotebook的字体,使用JetBrains Mono
  • 网站建设公司做销售前景好不好/做网站优化哪家公司好
  • 自己的服务器做网站/友情链接检查工具
  • 怎么样制作网站教程/关键词排名查询工具免费
  • 比价网站怎么做/定制型营销网站建设
  • 网站开发 java/网络新闻发布平台发稿
  • 桂平网站建设/网站维护是做什么的