当前位置:网站首页>POJ1094Sorting It All Out题解
POJ1094Sorting It All Out题解
2022-08-04 11:21:00 【bj_hacker】
题目
链接
http://poj.org/problem?id=1094
字面描述
Sorting It All Out
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 46761 Accepted: 16219
Description
An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from smallest to largest. For example, the sorted sequence A, B, C, D implies that A < B, B < C and C < D. in this problem, we will give you a set of relations of the form A < B and ask you to determine whether a sorted order has been specified or not.
Input
Input consists of multiple problem instances. Each instance starts with a line containing two positive integers n and m. the first value indicated the number of objects to sort, where 2 <= n <= 26. The objects to be sorted will be the first n characters of the uppercase alphabet. The second value m indicates the number of relations of the form A < B which will be given in this problem instance. Next will be m lines, each containing one such relation consisting of three characters: an uppercase letter, the character “<” and a second uppercase letter. No letter will be outside the range of the first n letters of the alphabet. Values of n = m = 0 indicate end of input.
Output
For each problem instance, output consists of one line. This line should be one of the following three:
Sorted sequence determined after xxx relations: yyy…y.
Sorted sequence cannot be determined.
Inconsistency found after xxx relations.
where xxx is the number of relations processed at the time either a sorted sequence is determined or an inconsistency is found, whichever comes first, and yyy…y is the sorted, ascending sequence.
Sample Input
4 6
A<B
A<C
B<C
C<D
B<D
A<B
3 2
A<B
B<A
26 1
A<Z
0 0
Sample Output
Sorted sequence determined after 4 relations: ABCD.
Inconsistency found after 2 relations.
Sorted sequence cannot be determined.
Source
East Central North America 2001
思路
- 无序:入度点数为0的点数大于1
- 有环:开始没有入度为0的点||最终没有遍历完
- 有序:上述条件之外
重点
有环的优先级大于无序的优先级 {有环的优先级大于无序的优先级} 有环的优先级大于无序的优先级
代码实现
#include<cstdio>
#include<cstring>
#include<string.h>
#include<stack>
using namespace std;
const int maxn=100+10;
int n,m;
int indegree[maxn],topo[maxn],indegree1[maxn];
bool map[maxn][maxn];
inline int Topo_sort(int n){
stack<int>s;
int cnt=0,cnt0=0,flag1=1;
for(int i=1;i<=n;i++)indegree1[i]=indegree[i];
for(int i=1;i<=n;i++){
if(indegree1[i]==0){
s.push(i);
cnt0++;
}
}
if(cnt0==0)return 2;
if(cnt0>1)flag1=0;
while(!s.empty()){
cnt0=0;
int u=s.top();
s.pop();
topo[++cnt]=u;
for(int i=1;i<=n;i++){
if(map[u][i]){
if(--indegree1[i]==0){
s.push(i);
cnt0++;
}
}
}
if(cnt0>1)flag1=0;
}
if(cnt<n)return 2;
return flag1;
}
int main(){
//freopen("1094.in","r",stdin);
//freopen("1094.out","w",stdout);
while(1){
scanf("%d%d",&n,&m);
if(!n&&!m)break;
memset(indegree,0,sizeof(indegree));
memset(map,false,sizeof(map));
//memset(vis,false,sizeof(vis));
int flag=0;
for(int i=1;i<=m;i++){
char x,y,z;
scanf(" %c %c %c",&x,&y,&z);
if(flag)continue;
indegree[z-64]++;
map[x-64][z-64]=true;
//vis[x-64]=true;
//vis[z-64]=true;
//printf("%d ",indegree[z-64]);
int op=Topo_sort(n);
//printf("%d ",op);
if(op==2){
printf("Inconsistency found after %d relations.\n",i);
flag=1;
continue;
}
else if(op==1){
printf("Sorted sequence determined after %d relations: ",i);
for(int j=1;j<=n;j++)printf("%c",topo[j]+64);
printf(".\n");
flag=1;
continue;
}
//printf("%d ",flag);
}
if(!flag)printf("Sorted sequence cannot be determined.\n");
//for(int i=1;i<=n;i++)printf("%d ",indegree[i]);
}
return 0;
}
极端测试样例一组
15 60
B<M
M<H
N<G
N<E
I<D
B<D
A<J
O<D
D<J
F<E
I<L
F<B
I<C
C<E
I<K
I<J
A<E
B<L
G<J
A<G
N<H
H<J
K<N
K<E
F<J
C<D
K<M
G<L
F<H
M<L
A<K
B<K
E<L
B<H
F<D
M<E
M<G
N<L
O<J
D<H
O<B
B<C
A<L
I<B
F<L
C<L
A<C
N<O
A<B
F<C
K<J
C<G
O<E
I<O
D<E
I<N
F<N
M<J
H<L
N<D
Inconsistency found after 48 relations.
边栏推荐
猜你喜欢

强烈推荐一款优秀且通用的后台管理系统

面试蚂蚁(P7)竟被MySQL难倒,奋发图强后二次面试入职蚂蚁金服

What is the terminal privilege management

Small program containers accelerate the construction of an integrated online government service platform

Jenkins User Manual (1) - Software Installation

什么是 DevOps?看这一篇就够了!

Zikko launches new Thunderbolt 4 docking station with both HDMI2.1 and 2.5GbE

Leetcode刷题——二叉搜索树相关题目(98. 验证二叉搜索树、235. 二叉搜索树的最近公共祖先、1038. 从二叉搜索树到更大和树、538. 把二叉搜索树转换为累加树)

Oracle中对临时表空间执行shrink操作

深度强化学习与APS的一些感想
随机推荐
拦截器,文件流,下载文件?
3-5年以上的功能测试如何进阶自动化?
Leetcode——利用先序遍历特性完成114. 二叉树展开为链表
Doing Homework HDU - 1074
Leetcode刷题——构造二叉树(105. 从前序与中序遍历序列构造二叉树、106. 从中序与后序遍历序列构造二叉树)
什么是 DevOps?看这一篇就够了!
Zhihu Data Analysis Training Camp
北京大学,新迎3位副校长!其中一人为中科院院士!
cat /proc/kallsyms found that the kernel symbol table values are all 0
Meishe Q&A Room | Meiying VS Meishe Cloud Editing
使用json-server快速搭建本地数据接口
Four ways to traverse a Map
从零开始Blazor Server(7)--使用Furion权限验证
[Hongke case] Assembling furniture based on 3D camera
Leetcode刷题——二叉搜索树相关题目(98. 验证二叉搜索树、235. 二叉搜索树的最近公共祖先、1038. 从二叉搜索树到更大和树、538. 把二叉搜索树转换为累加树)
网管交换机与非网管交换机如何选择?
ESP8266-Arduino编程实例-APDS-9930环境光和趋近感器驱动
bitset的基本用法
C language * Xiaobai's adventure
章节小测一