题目链接

题目大意:

给定一定的数量的小于关系:

1.如果发现环,输出从前几次就可以确定出现环

2.如果能够确定唯一序列,输出。

3.如果通过全部关系,还不能确定序列,则输出不能确定.

分析:

个人感觉难点在于判环上。

1.如果每次都只能找到1个入度为0的点,并能确定序列,则该序列即为答案。

2.如果每次查找时,发现两个及其以上的入度为0的点,则表明一定不能确定唯一序列(即存在环或者是不能确定)。如果可以确定一个任意序列,即表明还需要更多关系。如果继续查找下去,找不到入度为0的点,则存在环。 

AC代码如下:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue> using namespace std; const int maxn = ;
const int INF = (<<); int n, m, indeg[maxn], S[maxn], top, mark;
bool G[maxn][maxn], v[maxn]; int toposort()
{
int deg[maxn], cn;
bool vis[maxn], flag = true; top = ;
memcpy(deg, indeg, sizeof(deg));
memset(vis, , sizeof(vis)); for(int i=; i<n; i++)
{
cn = ; for(int k=; k<n; k++) if(deg[k] == ) cn++; //计算入度为0的点的个数 if(cn > ) flag = false; //出现环或者不能确定唯一序列
else if(cn == ) break; //出现环 int k;
for(k=; k<n; k++) if(deg[k] == ) break;
S[top++] = k;
deg[k]--;
for(int j=; j<n; j++) if(G[k][j]) deg[j]--;
} if(cn == ) return -; //环
if(mark < n || !flag) return ; //不能判断
else return ; //拓扑成功
} int main()
{
char c1, c2;
int flag, num;
// freopen("my.txt", "r", stdin);
while(scanf("%d %d", &n, &m) == )
{
if(n == && m == ) break; memset(indeg, , sizeof(indeg));
memset(G, false, sizeof(G));
memset(v, false, sizeof(v)); flag = ;
mark = ; for(int i=; i<m; i++)
{
getchar();
scanf("%c<%c", &c1, &c2); if(!G[c1-'A'][c2-'A']) {
G[c1-'A'][c2-'A'] = true;
indeg[c2-'A']++;
} //mark用来标记当前已经出现的字母的个数
if(!v[c1-'A']) { v[c1-'A'] = true; mark++; }
if(!v[c2-'A']) { v[c2-'A'] = true; mark++; } int res;
if(flag == ) {
res = toposort(); if(res == -) {
flag = -;
num = i;
} else if(res == ) {
num = i;
flag = ;
}
}
} if(flag == ) {
printf("Sorted sequence determined after %d relations: ", num+);
for(int i=; i<top; i++)
{
putchar(S[i]+'A');
}
printf(".\n");
}
else if(flag == ) printf("Sorted sequence cannot be determined.\n");
else printf("Inconsistency found after %d relations.\n", num+);
} return ;
}

POJSorting It All Out (拓扑)的更多相关文章

  1. 算法与数据结构(七) AOV网的拓扑排序

    今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...

  2. 有向无环图的应用—AOV网 和 拓扑排序

    有向无环图:无环的有向图,简称 DAG (Directed Acycline Graph) 图. 一个有向图的生成树是一个有向树,一个非连通有向图的若干强连通分量生成若干有向树,这些有向数形成生成森林 ...

  3. 通过HTML5的Drag and Drop生成拓扑图片Base64信息

    HTML5 原生的 Drag and Drop是很不错的功能,网上使用例子较多如 http://html5demos.com/drag ,但这些例子大部分没实际用途,本文将搞个有点使用价值的例子,通过 ...

  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. T型及Fly_by拓扑之应用总结

    前面的文章有分别介绍过T型拓扑及Fly_by拓扑结构,这两种拓扑结构应用最多的应该是在DDR3里面,说到这里,小编又想开始聊聊DDR3的设计了,我想很多人都比较有兴趣. 因为DDR3的设计还是比较复杂 ...

  8. Java排序算法——拓扑排序

    package graph; import java.util.LinkedList; import java.util.Queue; import thinkinjava.net.mindview. ...

  9. poj 3687(拓扑排序)

    http://poj.org/problem?id=3687 题意:有一些球他们都有各自的重量,而且每个球的重量都不相同,现在,要给这些球贴标签.如果这些球没有限定条件说是哪个比哪个轻的话,那么默认的 ...

随机推荐

  1. [Angular 2] ng-model and ng-for with Select and Option elements

    You can use Select and Option elements in combination with ng-for and ng-model to create mini-forms ...

  2. Qt 学习之路:视图选择 (QItemSelectionModel)

    选择是视图中常用的一个操作.在列表.树或者表格中,通过鼠标点击可以选中某一项,被选中项会变成高亮或者反色.在 Qt 中,选择也是使用了一种模型.在 model/view 架构中,这种选择模型提供了一种 ...

  3. Linux shell入门基础(五)

    五.bash运算及启动脚本 01.使用bash的命令历史 #history …… #set(显示所有的变量) | grep HIS HISTFILE=/root/.bash_history HISTF ...

  4. 哥的第一个Jquery程序

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...

  5. Set Keep-Alive Values---C到C#代码的转换

    一.什么是Keep-Alive模式? 我们知道HTTP协议采用“请求-应答”模式,当使用普通模式,即非KeepAlive模式时,每个请求/应答客户和服务器都要新建一个连接,完成 之后立即断开连接(HT ...

  6. Ajax数据格式,html,xml,json

    1. 2. 3. 4. 5. 6. 7. 8. 9.

  7. Objective-C学习篇06—NSString与NSMutableString

    NSString OC提供了定义字符串对象的方法,也就是将想要表达的字符串用一对双引号引起来,并在开头加上@.@是OC中的指令符,它告诉编译器@以后的内容为OC中的语法.比如@”Harbingwang ...

  8. windows 7下安装python+mongodb

    1. python安装 下载:http://python.org/download/ 直接双击安装,安装完后将路径加入系统环境变量path中. 2. mongodb安装 下载:http://www.m ...

  9. JavaScript设计模式之代理模式

    一.代理模式概念 代理,顾名思义就是帮助别人做事,GoF对代理模式的定义如下: 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问.代理模式使得代理对象控制具体对象的引用.代理几乎可 ...

  10. Highcharts中文网

    官网地址: http://www.hcharts.cn/ http://www.hcharts.cn/p/highchartTable.php 名词解释 英文名  中文名 描述  更多 lang 语言 ...