关系具有传递性,可以用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. 2022-7-9 第五小组 潘堂智 html学习笔记

    什么是 HTML? HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (ma ...

  2. Charles 某音最新版本抓包环境搭建

    本文仅供学习交流使用,如侵立删! Charles 某音最新版本抓包环境搭建 操作环境 google nexus5x Android 8.1 Magisk 24.3 Douyin 17.3 kaliLi ...

  3. k8s驱逐篇(2)-kubelet节点压力驱逐

    kubelet节点压力驱逐 kubelet监控集群节点的 CPU.内存.磁盘空间和文件系统的inode 等资源,根据kubelet启动参数中的驱逐策略配置,当这些资源中的一个或者多个达到特定的消耗水平 ...

  4. Luogu5020 货币系统 (完全背包)

    bool型完全背包 #include <iostream> #include <cstdio> #include <cstring> #include <al ...

  5. LuoguP2217 [HAOI2007]分割矩阵 (DP + memorized search)

    int n,m,tim; int mp[N][N], sum[N][N]; double ave,dp[N][N][N][N][N]; inline double DP(int a,int b,int ...

  6. virtual box 安装虚拟机如何全屏

    最近由于要进行微信小程序的开发.可恶的腾讯狗没有提供linux版的开发工具!不得以安装虚拟机!暗号虚拟机后发现win10的界面实在是太小,于是乎去解决这个问题!其实很简单,一般来是说直接点虚拟机面板上 ...

  7. [跨数据库、微服务] FreeSql 分布式事务 TCC/Saga 编排重要性

    前言 FreeSql 支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/Gbase/神通/人大金仓/翰高/Clickhouse/MsAcc ...

  8. Unhandled Exception: MissingPluginException(No implementation found for method launch on channel)

    在添加依赖包时,可能会出现Unhandled Exception: MissingPluginException(No implementation found for method launch o ...

  9. 人人都能看懂的卡西欧fx991cnx玩机指南,手把手教你如何利用计算器的漏洞爆机

    专业术语说明 你是VerB还是VerC 别人问你这个问题的时候不要慌,帮你看你的计算器是Ver几: 同时按住shift.7.开机键 9 5次shift 第一行后半句即是 紧接着可以顺便看看计算器的序列 ...

  10. Android下的Drawable使用

    Drawable表示一种可绘制的内容,可以由图片或者颜色组成.Android下的Drawable有BitmapDrawable.GradientDrawable.LayerDrawable等等 1.B ...