Sorting It All Out (拓扑排序+思维)
Input
Output
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.
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<vector>
#include<map>
#include<cmath>
const int maxn=1e5+;
typedef long long ll;
using namespace std;
vector<int>vec[];
int n,m;
int du[];
int chu[];
int du1[];
int flag;
vector<int>ans1;
void Tpsort()
{
priority_queue<int,vector<int>,greater<int> >q;
priority_queue<int>q1; int s=;
for(int t=;t<n;t++)
{
if(chu[t]==&&du[t]==)
{
s=;
}
}
for(int t=;t<n;t++)
{
du1[t]=du[t];
}
for(int t=;t<n;t++)
{
if(du1[t]==)
{
q.push(t);
q1.push(t);
}
}
vector<int>ans,ans2;
while(!q.empty())
{
int now=q.top();
int now2=q1.top();
q.pop();
q1.pop();
ans.push_back(now);
ans2.push_back(now2);
for(int t=;t<vec[now].size();t++)
{
int next=vec[now][t];
du1[next]--;
if(du1[next]==)
{
q.push(next);
q1.push(next);
}
}
}
if(ans.size()!=n)
{
flag=;
}
// cout<<ans.size()<<" "<<s<<endl; if(ans.size()==n&&s==)
{
int sss=;
for(int t=;t<ans.size();t++)
{
if(ans[t]!=ans2[t])
{
sss=;
}
}
if(sss==)
{
flag=;
for(int t=;t<ans.size();t++)
{
ans1.push_back(ans[t]);
}
} } }
int main()
{ while(cin>>n>>m)
{
if(n==&&m==)
{
break;
}
for(int t=;t<n;t++)
{
vec[t].clear();
}
char str[];
memset(du,,sizeof(du));
memset(chu,,sizeof(chu));
flag=;
int ss=;
int k;
ans1.clear();
for(int t=;t<=m;t++)
{
scanf("%s",str);
vec[str[]-'A'].push_back(str[]-'A');
du[str[]-'A']++;
chu[str[]-'A']++;
if(ss)
{
continue;
}
Tpsort();
if(flag==)
{
printf("Inconsistency found after %d relations.\n",t);
ss=;
}
else if(flag==)
{
ss=;
printf("Sorted sequence determined after %d relations: ",t);
for(int j=;j<n;j++)
{
printf("%c",ans1[j]+'A');
}
printf(".\n"); }
}
if(ss==)
puts("Sorted sequence cannot be determined."); }
return ;
}
Sorting It All Out (拓扑排序+思维)的更多相关文章
- ACM: poj 1094 Sorting It All Out - 拓扑排序
poj 1094 Sorting It All Out Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%lld & ...
- poj 1094 Sorting It All Out (拓扑排序)
http://poj.org/problem?id=1094 Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Su ...
- [poj1094]Sorting It All Out_拓扑排序
Sorting It All Out poj-1094 题目大意:给出一些字符串之间的大小关系,问能否得到一个唯一的字符串序列,满足权值随下标递增. 注释:最多26个字母,均为大写. 想法:显然,很容 ...
- POJ1094 Sorting It All Out —— 拓扑排序
题目链接:http://poj.org/problem?id=1094 Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Tot ...
- ZOJ 4124 拓扑排序+思维dfs
ZOJ - 4124Median 题目大意:有n个元素,给出m对a>b的关系,问哪个元素可能是第(n+1)/2个元素,可能的元素位置相应输出1,反之输出0 省赛都过去两周了,现在才补这题,这题感 ...
- POJ 1094:Sorting It All Out拓扑排序之我在这里挖了一个大大的坑
Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 29984 Accepted: 10 ...
- CF思维联系--CodeForces -214C (拓扑排序+思维+贪心)
ACM思维题训练集合 Furik and Rubik love playing computer games. Furik has recently found a new game that gre ...
- [ACM_模拟] POJ 1094 Sorting It All Out (拓扑排序+Floyd算法 判断关系是否矛盾或统一)
Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...
- nyoj349 poj1094 Sorting It All Out(拓扑排序)
nyoj349 http://acm.nyist.net/JudgeOnline/problem.php?pid=349poj1094 http://poj.org/problem?id=10 ...
随机推荐
- nginx多个server的配置,同一端口
nginx多个server的配置,同一端口 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/e ...
- Nexus3 上传的文件在哪里
上传文件 ojdbc7.jar,上传步骤略. 服务器上默认的文件存放路径是: nexus/sonatype-work/nexus3/blobs/default/content/ 一堆文件夹,根据时间确 ...
- MD5算法——C++实现
MD5算法原理 MD5消息摘要算法,属Hash算法一类.MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要. 具体实现可参考博客 https://blog.csdn.net/sinat ...
- 什么是c/c++编译
GCC是什么 GNU Compiler Collection的缩写,一开始是c语言的编译器,但现今可以支持多种语言的编译工作,也支持了多个硬件平台的编译.总而言之,主流的c语言编译器就是这个gcc了. ...
- 转行做程序员,培训or自学?过来人亲身经历良心分享
大家好,我是良许. 熟悉我的朋友应该知道我是学机械出身的,但是毕业后就自学转行成了一名 Linux 应用开发工程师了.我之前也做了几个跟转行相关的视频,有兴趣的小伙伴可以去看看. 在本文里,我将给大家 ...
- linux修改最大的文件描述符(max file descriptors)
用xshell登录linux系统之后,用命令>ulimit -a 注意到系统模式是1024个 使用>ulimit -n 数量,可临时更改,生效范围为当前会话 永久修改的方法: > v ...
- async + await 异步
先执行A在执行B再执行.then里面的AAA() { XXXXX一堆代码 this.BBB().then(()=>{ 其他代码 })}, async BBB(){ let res = await ...
- 手把手教你使用VUE+SpringMVC+Spring+Mybatis+Maven构建属于你自己的电商系统之vue后台前端框架搭建——猿实战01
猿实战是一个原创系列文章,通过实战的方式,采用前后端分离的技术结合SpringMVC Spring Mybatis,手把手教你撸一个完整的电商系统,跟着教程走下来,变身猿人找到工作不是 ...
- 你还在认为 count(1) 比 count(*) 效率高?
你还在认为 count(1) 比 count(*) 效率高? 3 很多人认为count(1)执行的效率会比count()高,原因是count()会存在全表扫描,而count(1)可以针对一个字段进行查 ...
- 正则表达式截取xml
$str = '<Ips><GateWayRsp><head><ReferenceID>123</ReferenceID><RspCo ...