/*
给定一组偏序关系,问最少第几步能确定次序
如果出现环,问第几步出现环
因为要求第几步确定次序或者第几步出现环,所以每次读入一个偏序关系就进行一次拓扑排序
*/
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
const int N = ;
int in[N]; //入度
bool Map[N][N]; //临接矩阵此题可以随便用
char out[N]; //拓扑排序输出数组 int topsort( int n ) {
priority_queue<int,vector<int>,greater<int> > q; //优先队列忠实粉丝
int flag = ,k;
int zeroflag = ;
int num = ,temp[N];
memcpy(temp,in,sizeof(in));//拷贝
for( int i = ; i < n; i++ ) {
if( !in[i] ) q.push(i);
}
while( !q.empty() ) {
if( q.size() > )
zeroflag = ;//要注意在while里面判断 因为此过程中也可能出现入度0不止一个的情况
k = q.top();
q.pop();
num++;
out[num] = k + 'A'; //num计数 以存到out里面
for(int i = ; i < n; i++ )
if(Map[k][i]== && --temp[i] == )
q.push(i);
}
if( num != n ) return ;
if( zeroflag == ) return ;//多个点入度为零
return -;
}
int main(){
int n,m,k;
int step; //记录操作数
int circleflag,orderflag;
char s[];
while( scanf("%d%d", &n, &m) != EOF && n ){
circleflag=;orderflag=;
memset(Map,,sizeof(Map));
memset(in,,sizeof(in));
for( int i = ; i <= m; i++ ){
scanf("%s", s);
if( circleflag == && orderflag == ){ //已经判出了 就不读了
if(Map[s[]-'A'][s[]-'A'] == ){
circleflag=; //有环了
printf("Inconsistency found after %d relations.\n", i);
continue ;
}
if(Map[s[]-'A'][s[]-'A'] == ){
Map[s[]-'A'][s[]-'A'] = ;
in[s[]-'A']++;
}
k = topsort(n);
if( k == ){
circleflag=;
printf("Inconsistency found after %d relations.\n", i);
}
else if( k == - ){
orderflag=;
step=i; //记录位置
}
}
}
if(circleflag == && orderflag == )
printf("Sorted sequence cannot be determined.\n");
else if(orderflag == ){
printf("Sorted sequence determined after %d relations: ", step);
for(int i=; i<=n; i++)
printf("%c", out[i]);
printf(".\n");
}
}
return ;
}

poj1094 恶心题,,每次加边进行判断的更多相关文章

  1. poj3502 恶心题

    巨恶心的一个题::>_<:: 题意:给出航班航线和大陆,找航线上距离大陆最远的某一点距离大陆边缘的距离 标准算法:二分答案,从大陆边界向外扩展,扩展出来的面积会覆盖航线.找出航线上最后被覆 ...

  2. 暑假集训——cf热身赛部分题有感加其题解

    刚刚开始集训,集训队队长暂时还没有拉专题,而是拉了部分codeforces上过题人数在2000左右的题组成了一场热身赛(其实就是一场练习),花了一天时间终于把它刷完了,其中很多题让我学到了很多骚操作, ...

  3. POJ:2429-GCD & LCM Inverse(素数判断神题)(Millar-Rabin素性判断和Pollard-rho因子分解)

    原题链接:http://poj.org/problem?id=2429 GCD & LCM Inverse Time Limit: 2000MS Memory Limit: 65536K To ...

  4. 检测js代码是否已加载的判断代码

    该方法不局限于jQuery的检测,对与任何Javascript变量或函数都是通用的. 当前网页加载jQuery后,jQuery()或$()函数将会被定义,所以检测jQuery是否已经加载存在以下2种方 ...

  5. QAU 18校赛 J题 天平(01背包 判断能否装满)

    问题 J: 天平 时间限制: 1 Sec  内存限制: 128 MB提交: 36  解决: 9[提交][状态][讨论版][命题人:admin] 题目描述 天平的右端放着一件重量为w的物品.现在有n个重 ...

  6. <LC刷题二>回文字符串判断之leetcode125&234

    其他刷题记录见博客首页 1,leecode125 验证回文串 原题: 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. ...

  7. 蓝桥杯 第四届C/C++预赛真题(5) 前缀判断(水题)

    题目标题:前缀判断 如下的代码判断 needle_start指向的串是否为haystack_start指向的串的前缀,如不是,则返回NULL. 比如:"abcd1234" 就包含了 ...

  8. 笔试算法题(29):判断元素范围1到N的数组是否有重复数字 & 计算整数的7倍

    出题:一个长度为N的数组,其中的元素取值范围是1到N,要求快速判断数组是否存在重复数字: 分析: 解法1:如果N个元素的范围都是在1到N,所以如果没有重复元素,则每一个位置恰好可以对应数组中的一个元素 ...

  9. javascript异步延时加载及判断是否已加载js/css文件

    <html> <head> <script type="text/javascript"> /**======================= ...

随机推荐

  1. python 08

    函数 函数定义: 你可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号(). 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于 ...

  2. .Net Core 配置文件appsettings

    1.配置文件为appsettings 在appsettings添加ConnectionStrings: { "Logging": { "IncludeScopes&quo ...

  3. linux 启动管理

  4. Javascript - ExtJs - GridPanel组件 - 编辑

    GridPanel组件 - 编辑 Ext.grid.plugin.Editing 如果要对表格使用列编辑器控件,则需要完成以下几步 1.将columns中需要编辑的列设为editor并提供编辑列时所要 ...

  5. 操作dom影响性能的原因

    为什么dom操作会影响性能? 在浏览器当中,dom的实现和ECMAScript的实现是分离的. 例如,在IE中,ECMAScrit的实现在jscript.dll中,而DOM的实现在mshtml.dll ...

  6. 20165221—JAVA第六周学习心得

    课本知识点小结 第8章:常用实用类 String类 常量对象放入常量池中,而用string声明的对象变量中存放着引用.凡是new构造的常量都不在常量池中. startIndex表示提取字符的起始位置, ...

  7. Ettercap内网渗透

    最近网速很卡,于是想到有人在蹭网,怎么捉弄一下呢? 1.开启ettercap ettercap -G 2. Hosts->Scan,List 发现有几个新的地址192.168.1.71,192. ...

  8. LwIP Application Developers Manual3---链路层和网络层协议之IPV6,ICMP,IGMP

    1.前言 本文主要讲述链路层和网络层的协议IPV6,ICMP 2.IPV6 2.1 IPV6特性 IPv6是IPv4的更新.其最显著的差别在于地址空间由32位转换成128位 2.2 从应用的角度看IP ...

  9. ARMCC和GCC编译ARM代码的软浮点和硬浮点问题 【转】

    转自:http://houh-1984.blog.163.com/blog/static/31127834201211112129167/ 本文介绍了ARM代码编译时的软浮点(soft-float)和 ...

  10. CGI,FastCGI,PHP-CGI与PHP-FPM区别详解【转】

    CGI CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上. CGI可以用任何一 ...