
VK Cup 2017 - Qualification 2 C. Online Courses In BSU(dfs)
发布日期:2021-05-08 15:17:21
浏览次数:22
分类:原创文章
本文共 807 字,大约阅读时间需要 2 分钟。
题意:总共有n个任务,有m个任务你必须完成,每个任务完成前可以有其他的子任务也必须完成,求完成的任务的顺序。
思路:一开始想着拓扑排序,但好像也不用那么反面,直接将那m个任务进行dfs,如果先后顺序反了则是-1.
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=2e5+1;int n,m,a[maxn],vis[maxn],pos[maxn];vector<int>g[maxn],ans;void dfs(int x){ vis[x]=1; for(auto to:g[x]) if(!vis[to]) dfs(to); ans.push_back(x);}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;++i) scanf("%d",&a[i]); for(int i=1,t,x;i<=n;++i) { scanf("%d",&t); while(t--) { scanf("%d",&x); g[i].push_back(x); } } for(int i=1;i<=m;++i) if(!vis[a[i]]) dfs(a[i]); for(int i=0;i<ans.size();++i) pos[ans[i]]=i; for(int i=0;i<ans.size();++i) { for(int j=0;j<g[ans[i]].size();++j) if(pos[g[ans[i]][j]]>i) { printf("-1\n");return 0;} } printf("%d\n",ans.size()); for(int i:ans) printf("%d ",i);}
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年03月24日 16时15分54秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
(数据科学学习手札40)tensorflow实现LSTM时间序列预测
2019-03-06
[整理] 哪些集合类是线程安全的?(Java)
2019-03-06
8 个警示和学习的 5 个阶段
2019-03-06
c# 图片带水纹波动
2019-03-06
H5 贪吃蛇源码
2019-03-06
从零开始学安全(十六)● Linux vim命令
2019-03-06
从零开始学安全(三十四)●百度杯 ctf比赛 九月场 sqli
2019-03-06
3389连接痕迹清除
2019-03-06
发生系统错误 6118
2019-03-06
阿里巴巴Json工具-Fastjson教程
2019-03-06
Spring Cloud Gateway - 快速开始
2019-03-06
Spring Security 实战干货:理解AuthenticationManager
2019-03-06
Java对象转JSON时如何动态的增删改查属性
2019-03-06
Python 面向对象进阶
2019-03-06
Linux常用统计命令之wc
2019-03-06
Git安装及使用以及连接GitHub方法详解
2019-03-06
docker容器与虚拟机的区别
2019-03-06
shell脚本里使用echo输出颜色
2019-03-06
Python2跟Python3的区别
2019-03-06
并发编程——IO模型详解
2019-03-06