题目链接: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. golang-结构体的使用

    package main import ( "fmt" "unsafe" ) type Person struct { name string sex byte ...

  2. 2019.11.11 模拟赛 T2 乘积求和

    昨天 ych 的膜你赛,这道题我 O ( n4 ) 暴力拿了 60 pts. 这道题的做法还挺妙的,我搞了将近一天呢qwq 题解 60 pts 根据题目给出的式子,四层 for 循环暴力枚举统计答案即 ...

  3. Hadoop hadoop balancer配置

    hadoop版本:2.9.2 1.带宽的设置参数: dfs.datanode.balance.bandwidthPerSec   默认值 10m 2.datanode之间数据块的传输线程大小:dfs. ...

  4. 教你怎样用fluent长网格【转载】

    转载地址: http://blog.sina.cn/dpool/blog/s/blog_63a80e870100k1jo.html?type=-1 有的时候,当你十月怀胎,千辛万苦把网格生出来,导入f ...

  5. GO语言strconv包的使用

    Go语言中strconv包实现了基本数据类型和其字符串表示的相互转换. strconv包 strconv包实现了基本数据类型与其字符串表示的转换,官方文档中文版. string与int类型转换 Ato ...

  6. JavaWeb之基础(1) —— 文件、目录结构和创建项目

    1. JavaWeb应用 JavaWeb应用从大类上分为静态和动态两种. 静态应用就是传统的HTML文件+素材资源构造的静态网页,不需要特殊的配置.JavaWeb也不是专门用来做静态网站的. 动态应用 ...

  7. 关于SQL中的ROWNUM问题

    前言 昨天改小程序的后台,看见之前写的分页很奇怪,startIndex和endIndex两个下标, endIndex 总是在里面层,而startIndex总是在外层,我随后改了,直接Where row ...

  8. DELPHI LINUX中间件隆重发布

    LINUX和WINDOWS是目前最流利的两个服务器操作系统,各种云服务商也是同时提供这2种操作系统的云服务器. 即日起,在原有WINDOWS中间件的产品基础上,再隆重推出新产品:LINUX中间件.这样 ...

  9. SQL Server DATEADD() 当前时间减7小时

  10. Springboot配置文件获取系统环境变量的值

    注意,这里说的是获取系统环境变量的值,譬如Windows里配置的JAVA_HOME之类的,可以直接在Springboot的配置文件中获取. 我们经常使用一些docker管理平台,如DaoCloud.r ...