POJ1094 Sorting It All Out (floyd传递闭包)
关系具有传递性,可以用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传递闭包)的更多相关文章
- UVA 247 电话圈 (floyd传递闭包 + dfs输出连通分量的点)
题意:输出所有的环: 思路:数据比较小,用三层循环的floyd传递闭包(即两条路通为1,不通为0,如果在一个环中,环中的所有点能互相连通),输出路径用dfs,递归还没有出现过的点(vis),输出并递归 ...
- UVA 753 UNIX 插头(EK网络流+Floyd传递闭包)
UNIX 插头 紫书P374 [题目链接]UNIX 插头 [题目类型]EK网络流+Floyd传递闭包 &题解: 看了书之后有那么一点懂了,但当看了刘汝佳代码后就完全明白了,感觉他代码写的好牛逼 ...
- UVA 247 电话圈(Floyd传递闭包+输出连通分量)
电话圈 紫书P365 [题目链接]电话圈 [题目类型]Floyd传递闭包+输出连通分量 &题解: 原来floyd还可以这么用,再配合连通分量,简直牛逼. 我发现其实求联通分量也不难,就是for ...
- POJ 3660 Cow ContestCow(Floyd传递闭包)题解
题意:给出m个关系,问你能确定机头牛的排名 思路:要确定排名那必须要把他和其他n-1头牛比过才行,所以Floyd传递闭包,如果赢的+输的有n-1就能确定排名. 代码: #include<cstd ...
- nyoj 211——Cow Contest——————【floyd传递闭包】
Cow Contest 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 N (1 ≤ N ≤ 100) cows, conveniently numbered 1.. ...
- POJ3660:Cow Contest(Floyd传递闭包)
Cow Contest Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16941 Accepted: 9447 题目链接 ...
- POJ 2594 —— Treasure Exploration——————【最小路径覆盖、可重点、floyd传递闭包】
Treasure Exploration Time Limit:6000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64 ...
- POJ 3660—— Cow Contest——————【Floyd传递闭包】
Cow Contest Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
- BZOJ 1612 [Usaco2008 Jan]Cow Contest奶牛的比赛:floyd传递闭包
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1612 题意: 有n头牛比赛. 告诉你m组(a,b),表示牛a成绩比牛b高. 保证排名没有并 ...
- POJ-2594 Treasure Exploration floyd传递闭包+最小路径覆盖,nice!
Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 8130 Accepted: 3 ...
随机推荐
- 2022-7-9 第五小组 潘堂智 html学习笔记
什么是 HTML? HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (ma ...
- Charles 某音最新版本抓包环境搭建
本文仅供学习交流使用,如侵立删! Charles 某音最新版本抓包环境搭建 操作环境 google nexus5x Android 8.1 Magisk 24.3 Douyin 17.3 kaliLi ...
- k8s驱逐篇(2)-kubelet节点压力驱逐
kubelet节点压力驱逐 kubelet监控集群节点的 CPU.内存.磁盘空间和文件系统的inode 等资源,根据kubelet启动参数中的驱逐策略配置,当这些资源中的一个或者多个达到特定的消耗水平 ...
- Luogu5020 货币系统 (完全背包)
bool型完全背包 #include <iostream> #include <cstdio> #include <cstring> #include <al ...
- 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 ...
- virtual box 安装虚拟机如何全屏
最近由于要进行微信小程序的开发.可恶的腾讯狗没有提供linux版的开发工具!不得以安装虚拟机!暗号虚拟机后发现win10的界面实在是太小,于是乎去解决这个问题!其实很简单,一般来是说直接点虚拟机面板上 ...
- [跨数据库、微服务] FreeSql 分布式事务 TCC/Saga 编排重要性
前言 FreeSql 支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/Gbase/神通/人大金仓/翰高/Clickhouse/MsAcc ...
- Unhandled Exception: MissingPluginException(No implementation found for method launch on channel)
在添加依赖包时,可能会出现Unhandled Exception: MissingPluginException(No implementation found for method launch o ...
- 人人都能看懂的卡西欧fx991cnx玩机指南,手把手教你如何利用计算器的漏洞爆机
专业术语说明 你是VerB还是VerC 别人问你这个问题的时候不要慌,帮你看你的计算器是Ver几: 同时按住shift.7.开机键 9 5次shift 第一行后半句即是 紧接着可以顺便看看计算器的序列 ...
- Android下的Drawable使用
Drawable表示一种可绘制的内容,可以由图片或者颜色组成.Android下的Drawable有BitmapDrawable.GradientDrawable.LayerDrawable等等 1.B ...