题目链接:https://vjudge.net/contest/345791#problem/O

【问题描述】

  You are given 5 different sizes of kitchen plates. Each plate is marked with a letter A, B, C,D, or E. You are given 5 statements comparing two different plates, you need to rearrange the plates from smallest size to biggest size. For example: the sizes of these plates.

输入:

The input consist of 5 lines. In each line there will be 3 characters, the first and last character will be either A, B, C, D, or E and the middle character will be either > or < describing the comparison between two plates sizes. No two plates will be equal.

输出:

The output consist of 55 characters, the sorted order of balls from smallest to biggest plate. Otherwise, if the statements are contradicting print impossibleimpossible. If there are multiple answers, print any of them.

样例输入;

D>B
A>D
E<C
A>B
B>C
B>E
A>B
E>A
C<B
D<B 样例输出:
ECBDA
impossible

试题分析:
  给出5个大小关系,求其中一种满足从小到大的排列方式。因为输入并没有保证一定可以确定每两个Plate之间的大小关系,无法准确确定大小关系。题意只需要输出一种满足升序的排列即可,即用拓扑排序。
代码如下:
 #include<stdio.h>
#include<string.h>
#include<iostream>
#include<queue>
#include<string>
#include<map>
#define mem(a, b) memset(a, b, sizeof(a))
const int MAXN = ;
using namespace std; char s[MAXN];
int in[MAXN], out[MAXN];
int head[MAXN], cnt;
map<char, int> mp;
map<int, char> mpp;
string ans; struct Edge
{
int to, next;
}edge[MAXN]; void add(int a, int b)
{
cnt ++;
edge[cnt].to = b;
edge[cnt].next = head[a];
head[a] = cnt;
} void topo_sort()
{
queue<int> Q;
for(int i = ; i <= ; i ++)
if(!in[i])
Q.push(i);
while(!Q.empty())
{
int a = Q.front();
Q.pop();
ans += mpp[a];
for(int i = head[a]; i != -; i = edge[i].next)
{
int to = edge[i].to;
in[to] --;
if(!in[to])
{
Q.push(to);
}
}
}
if(ans.length() != )
printf("impossible\n");
else
cout << ans << endl;
} int main()
{
mp['A'] = , mp['B'] = , mp['C'] = , mp['D'] = , mp['E'] = ;
mpp[] = 'A', mpp[] = 'B', mpp[] = 'C', mpp[] = 'D', mpp[] = 'E'; mem(head, -), cnt = ;
ans = "";
for(int i = ; i <= ; i ++)
{
scanf("%s", s);
int x = mp[s[]], y = mp[s[]];
if(s[] == '<') //A < B则连边 表示A比B小
{
add(x, y);
out[x] ++;
in[y] ++;
}
else
{
add(y, x);
out[y] ++;
in[x] ++;
}
}
topo_sort();
return ;
}

【作业】Kitchen Plates(拓扑排序)的更多相关文章

  1. Codeforces Gym-102219 2019 ICPC Malaysia National J. Kitchen Plates (暴力,拓扑排序)

    题意:给你5个\(A,B,C,D,E\)大小关系式,升序输出它们,如果所给的大小矛盾,输出\(impossible\). 题意:当时第一眼想到的就是连边然后排序,很明显是拓扑排序(然而我不会qwq,之 ...

  2. 算法与数据结构(七) AOV网的拓扑排序

    今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...

  3. 有向无环图的应用—AOV网 和 拓扑排序

    有向无环图:无环的有向图,简称 DAG (Directed Acycline Graph) 图. 一个有向图的生成树是一个有向树,一个非连通有向图的若干强连通分量生成若干有向树,这些有向数形成生成森林 ...

  4. 【BZOJ-2938】病毒 Trie图 + 拓扑排序

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 609  Solved: 318[Submit][Status][Di ...

  5. BZOJ1565 [NOI2009]植物大战僵尸(拓扑排序 + 最大权闭合子图)

    题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=1565 Description Input Output 仅包含一个整数,表示可以 ...

  6. 图——拓扑排序(uva10305)

    John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task i ...

  7. Java排序算法——拓扑排序

    package graph; import java.util.LinkedList; import java.util.Queue; import thinkinjava.net.mindview. ...

  8. poj 3687(拓扑排序)

    http://poj.org/problem?id=3687 题意:有一些球他们都有各自的重量,而且每个球的重量都不相同,现在,要给这些球贴标签.如果这些球没有限定条件说是哪个比哪个轻的话,那么默认的 ...

  9. 拓扑排序 - 并查集 - Rank of Tetris

    Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球 ...

随机推荐

  1. PostgreSQL 常用语句

    postgres=# create database mydb; CREATE DATABASE postgres=# alter database mydb; ALTER DATABASE post ...

  2. 菜鸟的算法入门:java的链表操作

    从C语言的指针开始,我的算法之路就结束了! 今天为了找个好的实习,不得不捡起来,写了三年的web,算法落下了太多了 今天在leetcode上刷题,难在了一个简单的链表上,因此记录一下 题目:给定两个非 ...

  3. SSH如何使用

    如何查看SSH服务是否已经安装? 在终端命令行执行 rpm -qa | grep "ssh" 执行结果请看下图,说明已经安装:其实在安装linux操作系统的时候默认就会安装上的. ...

  4. OpenFOAM-双柱及群柱绕流

    这次的教程是紧接前几次的教程,设置与前几次教程类似,但是对于设置上稍微有一点点区别,就是在设置值的时候,出现了$internalField,其实这是一个字符串替换,就是在出现$internalFiel ...

  5. mysql 导出数据或结构

    mysql 导出数据或结构 语法说明 mysqldump -h 数据库地址 -u用戶名 -p密码 -d 数据库名 表名 > 脚本名; 导出整个数据库结构和数据 mysqldump -uroot ...

  6. http与https区别,get与post请求区别

    引用:http://blog.csdn.net/m0_38099607/article/details/72864684 HTTP与HTTPS的区别 超文本传输协议HTTP协议被用于在Web浏览器和网 ...

  7. etcd,flannel,docker relationship---and k8s

    journalctl -xe voidcn.com/article/p-qufvdmpq-bqn.html etcd more etcd.confETCD_NAME=default ETCD_DATA ...

  8. [XLua]热更新四部曲视频教程+示例源码

    基于Unity2017 xLua是由腾讯维护的一个开源项目,xLua为Unity. .Net. Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用.自20 ...

  9. ansible常用的方法小结

    一.批量安装zabbix客户端 .拷贝sh脚本和.conf到远程服务器(也可以全量拷贝客户端) ansible all -m copy -a "src=/usr/local/zabbix_a ...

  10. postgresql 利用pgAgent实现定时器任务

    1.安装pgAgent 利用Application Stack Builder安装向导,安装pgAgent. 根据安装向导一步一步安装即可. 安装完成之后,windows服务列表中会增加一个服务:Po ...