关系具有传递性,可以用floyd解决。

将关系都看做i<j的形式,令d[i][j]=1,如果d[i][j]=d[j][i]=1,说明矛盾;d[i][j]=d[j][i]=0,说明i与j的关系无法确定。

按顺序枚举每个关系,可以求出“”至少要前t个关系确定每两个变量之间的关系“的t值是多少,枚举过程中有矛盾直接return,枚举完了标记没有改变,说明不能确定每两个变量之间的关系。

代码是参考的算法竞赛进阶指南,题目不算很难,实现过程有点意思:

 1 #include <cstdio>
2 #include <cstring>
3 #include <iostream>
4 #include <algorithm>
5 using namespace std;
6 const int N = 30;
7 int n, m, d[N][N], e[N][N];
8
9 int floyd() {
10 memcpy(e, d, sizeof(e));
11 for (int k = 0; k < n; k++)
12 for (int i = 0; i < n; i++)
13 for (int j = 0; j < n; j++) {
14 e[i][j] |= e[i][k] & e[k][j];
15 if (e[i][j] == e[j][i] && e[i][j] && i != j) return -1;
16 }
17 for (int i = 0; i < n; i++)
18 for (int j = 0; j < n; j++)
19 if (e[i][j] == e[j][i] && !e[i][j] && i != j) return 0;
20 return 1;
21 }
22
23 void Sorting_It_All_Out() {
24 memset(d, 0, sizeof(d));
25 bool flag = 1;
26 for (int i = 1; i <= m; i++) {
27 char s[6];
28 scanf("%s", s);
29 d[s[0]-'A'][s[2]-'A'] = 1;
30 if (flag) {
31 int now = floyd();
32 if (now == -1) {
33 printf("Inconsistency found after %d relations.\n", i);
34 flag = 0;
35 } else if (now == 1) {
36 printf("Sorted sequence determined after %d relations: ", i);
37 pair<int, char> ans[N];
38 for (int j = 0; j < n; j++) {
39 ans[j].first = 0;
40 ans[j].second = 'A' + j;
41 }
42 for (int j = 0; j < n; j++)
43 for (int k = 0; k < n; k++)
44 if (e[j][k]) ++ans[j].first;
45 sort(ans, ans + n);
46 for (int j = n - 1; j >= 0; j--) printf("%c", ans[j].second);
47 puts(".");
48 flag = 0;
49 }
50 }
51 }
52 if (flag) puts("Sorted sequence cannot be determined.");
53 }
54
55 int main() {
56 while (cin >> n >> m && n) Sorting_It_All_Out();
57 return 0;
58 }

POJ1094 Sorting It All Out (floyd传递闭包)的更多相关文章

  1. UVA 247 电话圈 (floyd传递闭包 + dfs输出连通分量的点)

    题意:输出所有的环: 思路:数据比较小,用三层循环的floyd传递闭包(即两条路通为1,不通为0,如果在一个环中,环中的所有点能互相连通),输出路径用dfs,递归还没有出现过的点(vis),输出并递归 ...

  2. UVA 753 UNIX 插头(EK网络流+Floyd传递闭包)

    UNIX 插头 紫书P374 [题目链接]UNIX 插头 [题目类型]EK网络流+Floyd传递闭包 &题解: 看了书之后有那么一点懂了,但当看了刘汝佳代码后就完全明白了,感觉他代码写的好牛逼 ...

  3. UVA 247 电话圈(Floyd传递闭包+输出连通分量)

    电话圈 紫书P365 [题目链接]电话圈 [题目类型]Floyd传递闭包+输出连通分量 &题解: 原来floyd还可以这么用,再配合连通分量,简直牛逼. 我发现其实求联通分量也不难,就是for ...

  4. POJ 3660 Cow ContestCow(Floyd传递闭包)题解

    题意:给出m个关系,问你能确定机头牛的排名 思路:要确定排名那必须要把他和其他n-1头牛比过才行,所以Floyd传递闭包,如果赢的+输的有n-1就能确定排名. 代码: #include<cstd ...

  5. nyoj 211——Cow Contest——————【floyd传递闭包】

    Cow Contest 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 N (1 ≤ N ≤ 100) cows, conveniently numbered 1.. ...

  6. POJ3660:Cow Contest(Floyd传递闭包)

    Cow Contest Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16941   Accepted: 9447 题目链接 ...

  7. POJ 2594 —— Treasure Exploration——————【最小路径覆盖、可重点、floyd传递闭包】

    Treasure Exploration Time Limit:6000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64 ...

  8. POJ 3660—— Cow Contest——————【Floyd传递闭包】

    Cow Contest Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit  ...

  9. BZOJ 1612 [Usaco2008 Jan]Cow Contest奶牛的比赛:floyd传递闭包

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1612 题意: 有n头牛比赛. 告诉你m组(a,b),表示牛a成绩比牛b高. 保证排名没有并 ...

  10. POJ-2594 Treasure Exploration floyd传递闭包+最小路径覆盖,nice!

    Treasure Exploration Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 8130   Accepted: 3 ...

随机推荐

  1. MyBatis-通用Mapper-tk.mybatis的使用

    MyBatis-通用Mapper[更新中] tk.mybatis的使用 前言 使用MyBatis开发,如果是普通是同MyBatis进行开发,那么就需要在xml文件中编写大量的SQL.当数据库表结构发生 ...

  2. React报错之Object is possibly null

    正文从这开始~ 类型守卫 使用类型守卫来解决React中useRef钩子"Object is possibly null"的错误.比如说,if (inputRef.current) ...

  3. 使用python3.7和opencv4.1来实现人脸识别和人脸特征比对以及模型训练

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_126 OpenCV4.1已经发布将近一年了,其人脸识别速度和性能有了一定的提高,这里我们使用opencv来做一个实时活体面部识别的 ...

  4. 日志(logging模块)

    1. 为什么要使用日志(作用) 在学习过程中,写一个小程序或小demo时,遇到程序出错时,我们一般会将一些信息打印到控制台进行查看,方便排查错误.这种方法在较小的程序中很实用,但是当你的程序变大,或是 ...

  5. CF717 Festival Organization

    \(CF717\ Festival\ Organization\) Description 一个合法的串定义为:长度在 \([l,r]\) 之间,且只含 \(0,1\),并且不存在连续 \(2\) 个 ...

  6. 分布式二级缓存组件实战(Redis+Caffeine实现)

    前言 在生产中已有实践,本组件仅做个人学习交流分享使用.github:https://github.com/axinSoochow/redis-caffeine-cache-starter 个人水平有 ...

  7. MGR的gtid_executed不连续的问题分析

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 1.问题描述 在做MGR测试的时候偶尔遇到gtid_executed事务ID不连续的问题,但是并不影响数据库的正常运行.现 ...

  8. 超全selenium元素定位XPath、CSS

    说明:在HTML页面中,<p> 是一个标签,<p>hello</p> 是一个元素,元素由一个开始的标签和结束的标签组成.<font color="r ...

  9. Redis 14 发布订阅

    参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 概述 Redi ...

  10. 经典01背包问题(C++)--详解

    二维数组解决01背包问题 题目: 有 N 件物品和一个容量是 V 的背包.每件物品只能使用一次. 第 i 件物品的体积是 vi,价值是 wi. 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容 ...