链接:https://ac.nowcoder.com/acm/contest/5678/B
来源:牛客网

题目描述
Ubuntu20.04 正式发布了,ZLS 是一个作死小能手,于是他决定尝试一下这个船新版本。好不容易装完系统,ZLS 想要给他的系统装一些常用的软件。众所周知,在 Linux 装软件会遇到各种奇奇怪怪的依赖问题(所谓依赖问题就是若A依赖B,则B要先与A安装)。ZLS 对此不厌其烦,因此他想知道他要用什么顺序安装软件,可以一次安装成功呢?
Tips: ZLS 还有一个癖好,他喜欢先安装字典序小的软件。
输入描述:
第一行包含一个正整数 T 表示数据组数。
每组数据的第一行包 n 和 m, 表示有 n 个软件,m 个依赖关系。
接下来的一行包含 n 个软件名(软件名仅包含小写字母 a-z )
接下来的 m 行每行有两个软件名 s 和 t,表示 t 依赖 s ,即 s 要在 t 之前安装。
数据保证: 1 \le T \le 51≤T≤5
1 \le n \le 3 \times 10^{4}, 1 \le m \le 10^{5}1≤n≤3×10 4 ,1≤m≤10 5
1 \le |s|,|t| \le 101≤∣s∣,∣t∣≤10
输出描述:
共 T 组输出,每组输出先输出一行 Case #%d: ,%d 替换为当前输出的组数。
接下来是 n 行,按照安装的顺序输出。
如果无法进行安装,输出 Impossible (注意大小写)。
示例1
输入

2
4 2
a b c d
a b
b c
3 3
a b c
a b
b c
c a

输出

Case #1:
a
b
c
d
Case #2:
Impossible
#include<bits/stdc++.h>
using namespace std;
const int N=30005;
const int inf=0x3f3f3f3f;
int main()
{int t,n,i,j,m,k,ans=0,mx=0;scanf("%d",&t);for(j=1;j<=t;j++){scanf("%d %d",&n,&m);string d[N],x,y;unordered_map<string,int>mp;//unordered_map比map快,map会超时vector<int>v[30005],ans;int cnt[N]={0};for(i=0;i<n;i++)cin>>d[i];sort(d,d+n);for(i=0;i<n;i++) mp[d[i]]=i;for(i=0;i<m;i++){cin>>x>>y;int a=mp[x],b=mp[y];v[a].push_back(b);cnt[b]++;}priority_queue<int>q;for(i=0;i<n;i++)if(!cnt[i]) q.push(-i);while(q.size()){int k=-q.top();q.pop();//  printf("%d ",k);ans.push_back(k);for(i=0;i<v[k].size();i++ ){cnt[v[k][i]]--;if(!cnt[v[k][i]]) q.push(-v[k][i]);}}printf("Case #%d:\n",j);if(ans.size()<n) printf("Impossible\n");//存在环else {for(i=0;i<n;i++)cout<<d[ans[i]]<<endl;}}return 0;
}

【牛客】B 烦人的依赖(拓扑排序求顺序)相关推荐

  1. 牛客题霸 单链表的选择排序 C++题解/答案

    牛客题霸 单链表的选择排序 C++题解/答案 题目描述 给定一个无序单链表,实现单链表的选择排序(按升序排序). 题解: 不可能手写排序,这辈子不可能手写排序.. 基础的链表操作,将链表内的数据存到v ...

  2. 牛客多校6 - Josephus Transform(线段树求k-约瑟夫环+置换群的幂)

    题目链接:点击查看 题目大意:给出一个长度为 n 的排列,初始时为 1 , 2 , 3 ... n - 1 , n,现在有 m 次操作,每次操作表示为 ( k , x ) ,即进行 x 次 k-约瑟夫 ...

  3. 牛客练习赛51 C、勾股定理 只一边求另外两边 结论

    链接:https://ac.nowcoder.com/acm/contest/1083/C 来源:牛客网 勾股定理 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...

  4. 牛客每日练习----德玛西亚万岁,求最值,小牛再战

    我喜欢给自己压力,必须得定一个很高的目标,逼自己朝着这个目标前进,不管会不会实现,都是一个动力.                                      ----喻言 链接:http ...

  5. 数据结构(六):图的概念、存储方式、基本操作、最小生成树、最短路径、有向无环图、关键路径 | Prim、Kruskal算法 | BFS、Dijkstra、Floyd算法 | 拓扑排序 | 求关键路径

    文章目录 第六章 图 一.图 (一)图的定义 (二)图逻辑结构的应用 (三)无向图.有向图 (四)简单图.多重图 (五)顶点的度.入度.出度 (六)顶点-顶点的关系描述 (七)连通图.强连通图 (八) ...

  6. 牛客小白月赛2-B小马过河(求点到直线的垂足)

    题目链接 求点到直线的垂足分为 空间 .平面 原理: 空间: #include<iostream> #include<cmath> using namespace std; c ...

  7. 牛客多校5 - Graph(字典树+分治求最小生成树)

    题目链接:点击查看 题目大意:给出一棵树,每条边都有一个权值,每次操作可以删除任意一条边或者增加任意权值的一条边,现在可以执行数次操作,不过任何时间都要满足以下两个条件: n 个点互相连通 所有环的权 ...

  8. 【牛客 - 272D】Where are you(Tarjan求桥)

    题干: 小p和他的朋友约定好去游乐场游玩,但是他们到了游乐场后却互相找不到对方了. 游乐场可以看做是一张n个点,m条道路的图,每条道路有边权wi,表示第一次经过该道路时的花费(第二次及以后经过时花费为 ...

  9. 【MySQL快速入门】牛客网:条件查询(1)基础排序

    查询后排序: 排序子句为: 1 2 ORDER BY <列名> [ASC | DESC ] [,<列名> -  例:将学生按班号的升序排序 select *from 学生表 o ...

最新文章

  1. 一个PHP的HTTP POST方法
  2. 卡方 matlab,matlab卡方分布 卡方检验(Chi-square test)及其MATLAB实现 - 余姚娱乐网
  3. Objective-C RunTime 学习笔记 之 AutoReleasPool
  4. 内容分发网络 - Content Delivery Network 学习笔记
  5. 美团点评联盟广告场景化定向排序机制
  6. c语言源程序最多可能由组成,一个C语言源程序由若干函数组成,其中至少应含有一个()。...
  7. 中小企业如何建立商业智能
  8. 程序员,都是内卷之王!
  9. 对Linux下使用C++读写word文件的技术方案比较
  10. 如何编写一份完整的软件测试报告?(进阶版)
  11. 20180626 STM32 ---利用KILE5 仿真IO口的波形图
  12. 滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(10月17日~10月23日)...
  13. 工程研发中EVT、DVT、PVT、MP等名词解释
  14. Civil 3D 二次开发 创建Civil 3D 对象—— 00 ——
  15. 如何使用包含iApps的 F5 分布式云机器人防御轻松保护BIG-IP应用
  16. H3C--交换技术综合实践
  17. 全新发布的欧拉,华为手中的新“王炸”
  18. 库克怒发公开信:苹果不会给美国政府开后门,你们越权了!
  19. Windows Defender Antivirus Service关闭方法
  20. 《量化金融R语言初级教程》一2.4 切线组合和资本市场线

热门文章

  1. JavaScript画漂亮的心形图案
  2. python报错“cannot import name ft2font”
  3. CS5266替代AG9311设计TYPEC转HDMI带PD3.0音视频拓展坞方案
  4. 【技美百人计划】图形 4.5 Dof景深基础
  5. python提取文件_Python文件读取常用方法
  6. android计步器开源,开源Android项目pedometer计步器源码
  7. 基于android的计步器文档,基于Android的计步器(Pedometer)的讲解(六)
  8. C五子棋---心态是如何到绝望的.....
  9. Unity3d简单的发牌效果
  10. Android NDK 概述(Android NDK Overview)