nyoj 349 Sorting It All Out 【topo】
2015-11-28 14:14
323 查看
难度:3
描述
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 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.
输出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.
样例输入
样例输出
[/code]
Sorting It All Out
时间限制:3000 ms | 内存限制:65535 KB难度:3
描述
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 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.
输出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.
样例输入
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
样例输出
Sorted sequence determined after 4 relations: ABCD. Inconsistency found after 2 relations. Sorted sequence cannot be determined.
分析:
先把字符串转换成acci值,然后topo以下就行了
代码:
#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<queue> #include<iostream> #include<cmath> #define mem(x,y) memset(x,y,sizeof(x)) #include<stack> using namespace std; const int maxn =35; bool flag1,flag2; int map[maxn][maxn]; int vis[maxn]; int tp[maxn]; void topo(int n) { int k=0,i,j,temp[maxn],m,id; bool flag=false; memset(temp,0,sizeof(temp)); for(i=0;i<n;i++) temp[i]=vis[i]; for(i=0;i<n;i++) { m=0; for(j=0;j<n;j++) { if(temp[j]==0) { m++; id=j; } } if(m==0) { flag2=true; return; } if(m>1) flag=true; tp[k++]=id; temp[id]=-1; for(j=0;j<n;j++) if(map[id][j]==1) temp[j]--; } if(!flag) flag1=true; } int main() { int n,m; while(scanf("%d%d",&n,&m)&&(n||m)) { mem(map,0); mem(vis,0); flag1=flag2=false; int i,p; char u,v,t; for(i=1;i<=m;i++) { cin>>u>>t>>v; if(!flag1&&!flag2) { map[u-'A'][v-'A']=1; vis[v-'A']++; topo(n); p=i; } } if(flag1) { printf("Sorted sequence determined after %d relations: ",p); for(i=0;i<n;i++) printf("%c",tp[i]+'A'); printf(".\n"); continue; } if(flag2) { printf("Inconsistency found after %d relations.\n",p); continue; } printf("Sorted sequence cannot be determined.\n"); } //system("pause"); return 0; }
[/code]
相关文章推荐
- 第十五天-linux系统文件权限详细讲解
- linux 普通用户添加sudo权限
- Hadoop:自定义输入文件格式类InputFormat
- linux 中curl命令详解
- linux 下的 .a 文件 .o 文件 含义
- vim cscope使用
- VMware虚拟机的CentOS无法上网的解决方法(原先可以上网忽然不能了的解决)
- POJ - 3308 Paratroopers(最大流)
- 辽宁要求网站做公安备案,公安备案试运营
- iwebshop的debug的调试方法以及config文件在线上的修改
- linux centos 网卡错误 Device eth0 does not seem to
- linux压缩和解压缩命令大全
- 关于nginx的master进程可worker进程的概念
- property_get/property_set
- 【转】OpenCV中Mat的详解
- [angular] 篇 指令中的scope
- apache配置常用模块
- NSCopying NSCoding
- CentOS安装scp命令的软件包openssh-clients
- PopupWindow使用