HihoCoder - 1174 拓扑排序·一
由于今天上课的老师讲的特别无聊,小Hi和小Ho偷偷地聊了起来。
小Ho:小Hi,你这学期有选什么课么?
小Hi:挺多的,比如XXX1,XXX2还有XXX3。本来想选YYY2的,但是好像没有先选过YYY1,不能选YYY2。
小Ho:先修课程真是个麻烦的东西呢。
小Hi:没错呢。好多课程都有先修课程,每次选课之前都得先查查有没有先修。教务公布的先修课程记录都是好多年前的,不但有重复的信息,好像很多都不正确了。
小Ho:课程太多了,教务也没法整理吧。他们也没法一个一个确认有没有写错。
小Hi:这不正是轮到小Ho你出马的时候了么!
小Ho:哎??
我们都知道大学的课程是可以自己选择的,每一个学期可以自由选择打算学习的课程。唯一限制我们选课是一些课程之间的顺序关系:有的难度很大的课程可能会有一些前置课程的要求。比如课程A是课程B的前置课程,则要求先学习完A课程,才可以选择B课程。大学的教务收集了所有课程的顺序关系,但由于系统故障,可能有一些信息出现了错误。现在小Ho把信息都告诉你,请你帮小Ho判断一下这些信息是否有误。错误的信息主要是指出现了"课程A是课程B的前置课程,同时课程B也是课程A的前置课程"这样的情况。当然"课程A是课程B的前置课程,课程B是课程C的前置课程,课程C是课程A的前置课程"这类也是错误的。
提示:拓扑排序
输入
第1行:1个整数T,表示数据的组数T(1 <= T <= 5)
接下来T组数据按照以下格式:
第1行:2个整数,N,M。N表示课程总数量,课程编号为1..N。M表示顺序关系的数量。1 <= N <= 100,000. 1 <= M <= 500,000
第2..M+1行:每行2个整数,A,B。表示课程A是课程B的前置课程。
输出
第1..T行:每行1个字符串,若该组信息无误,输出"Correct",若该组信息有误,输出"Wrong"。
样例输入
2 2 2 1 2 2 1 3 2 1 2 1 3
样例输出
Wrong Correct
#include <cstdio> #include <iostream> #include <string> #include <cstring> #include <cmath> #include <algorithm> #include <queue> #include <map> #include <vector> using namespace std; #define ll long longvector<int>to[100000+8]; queue<int>q; priority_queue<int, vector<int>, greater<int> >you;int n, m, t, in[1000000+8], sign[1000000+8], du[1000000+8], si[1000000+8];int get(int miao) {for(int i = 0; i <= miao; i++){du[i] = in[i];si[i] = sign[i];}int num = miao;while(!q.empty()){int t = q.front();num--;q.pop();for(int i = 0; i<to[t].size(); i++){du[to[t][i]]--;if(!du[to[t][i]] && !si[to[t][i]]){q.push(to[t][i]);si[to[t][i]] = 1;}}}return num; }int main() {int a, b;for(scanf("%d", &t);t--;){memset(in, 0, sizeof(in));memset(sign, 0, sizeof(sign));for(int i = 0; i <= n; i++)to[i].clear();scanf("%d%d", &n, &m);for(int i = 0; i<m; i++){scanf("%d%d", &a, &b);to[a].push_back(b);in[b]++;}for(int i = 1; i <= n; i++){if(!in[i] && !sign[i]){q.push(i);you.push(i);sign[i] = 1;}}if(get(n) == 0)printf("Correct\n");else printf("Wrong\n");}return 0; }
转载于:https://www.cnblogs.com/RootVount/p/11201113.html
HihoCoder - 1174 拓扑排序·一相关推荐
- ACM: hihicoder #1174 : 拓扑排序·一 STL- queue
#1174 : 拓扑排序·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 由于今天上课的老师讲的特别无聊,小Hi和小Ho偷偷地聊了起来. 小Ho:小Hi,你这学期有选 ...
- hihoCoder 1175 拓扑排序
hihoCoder 1175 拓扑排序 描述 小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒.这事在校内BBS上立刻引起了大家的讨论,当然小Hi和小Ho也参与到了其中.从大家各自了解的情况中,小 ...
- HihoCoder - 1175 拓扑排序·二
描述 小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒.这事在校内BBS上立刻引起了大家的讨论,当然小Hi和小Ho也参与到了其中.从大家各自了解的情况中,小Hi和小Ho整理得到了以下的信息: 校园 ...
- hihocoder 1343 : Stable Members【拓扑排序】
hihocoder #1343:题目 解释: 一个学习小组,一共有N个学员,一个主管.每个学员都有自己的导师(一个或者多个),导师可以是其他学员也可以是主管. 每周学员都要把自己的学习报告和收到的报告 ...
- 题解报告:hihoCoder #1175:拓扑排序·二
题目链接:https://hihocoder.com/problemset/problem/1175 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho所在学 ...
- 【图论】有向无环图的拓扑排序
1. 引言 有向无环图(Directed Acyclic Graph, DAG)是有向图的一种,字面意思的理解就是图中没有环.常常被用来表示事件之间的驱动依赖关系,管理任务之间的调度.拓扑排序是对DA ...
- C#实现有向无环图(DAG)拓扑排序
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在 ...
- hdu 5438 Ponds 拓扑排序
Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...
- usaco frame up(所有拓扑排序的输出)
先根据图建图再拓扑排序. /** ID: jinbo wu TASK: frameup LANG:C++ */ #include<bits/stdc++.h> using namespac ...
最新文章
- LINUX利用Speedtest测速
- python中的datatype啥意思_案例中使用的是dataType,但是用在联系上面dataType不可用,必须改写成type:..._慕课问答...
- 安卓通讯录系统mysql_Android手机通讯录项目开发--联系人数据库contacts2.db介绍
- MyBatis映射文件(一)
- Python Flask实现查询和添加数据
- TIN与DEM的区别和联系
- 设计灵感|文字排版海报有多少种可能?
- Python 函数(三)
- 太秀了!单片机内置 ADC 实现高分辨率采样?
- python测试系列教程 —— 调试日志logging
- Windows phone 8.1 MessageBox 变了哦!
- CMOS中的 latch-up 闩锁效应、添加tap解决latch-up、使用combained area绘制TAP TAP的作用 IC后端版图【VLSI】
- Axure 8 注册码
- GoDaddy域名解析 到 阿里云域名DNS
- Python房贷计算器GUI(等额本息,等额本金)
- Win32 API 函数列表1(格式有点乱)
- 银行外包Java开发的一些感想2023.2.5
- sqlserver官网下载地址
- SQL审核 | SQLE-SQL审核平台体验报告
- Yarn的资源配置参数