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 ...
随机推荐
- Dubbo源码(三) - 服务导出(生产者)
前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 在了解了Dubbo SPI后,我们来了解下Dubbo服务导出的过程. Dubbo的配置是通过Du ...
- PHP小工具
防SQL注入 function clean($input) { if (is_array($input)) { foreach ($input as $key => $val) { $outpu ...
- YII服务定位器依赖注入
<?php /** * Created by PhpStorm. * Date: 2016/5/25 * Time: 18:33 * 服务定位器依赖注入 */ namespace fronten ...
- 使用.NET简单实现一个Redis的高性能克隆版(一)
译者注 该原文是Ayende Rahien大佬业余自己在使用C# 和 .NET构建一个简单.高性能兼容Redis协议的数据库的经历. 首先这个"Redis"是非常简单的实现,但是他 ...
- windows自动切换深色模式(夜晚模式)
img { width: 30vw } windows系统上怎么根据日出日落时间判断切换为深色模式或浅色模式呢? windows系统自带了一个叫做"任务计划程序"的软件.可以通过& ...
- 436. 寻找右区间--LeetCode_二分
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/find-right-interval 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出 ...
- 对Jmeter-基础线程组的一点解释
概述 线程组是一个测试计划的起点.测试计划中所有元件的运行都必须依托于线程组.每个线程组都会独立的运行测试计划,互不干扰 线程数 线程数在并发用户场景下表示用户数,比如100用户同时发起请求 线程数在 ...
- ASP.NET Core 6框架揭秘实例演示[33]:异常处理高阶用法
NuGet包"Microsoft.AspNetCore.Diagnostics"中提供了几个与异常处理相关的中间件,我们可以利用它们将原生的或者定制的错误信息作为响应内容发送给客户 ...
- linux tcp 在timewait 状态下的报文处理
最近处理一个问题,我们nginx服务器作为透明代理,将核心网过来的用户上网请求代理到我们的cache服务器,如果cache服务器没有命中内容,则需要我们 作为客户端往源站请求内容,但用户对此一无所知, ...
- C#基础_VS常用快捷键
Shift+End,Shift+Home,跳转到当前代码的行尾和行首. 1.窗口快捷键 记忆诀窍: 凡跟窗口挂上钩的快捷键必有一个W(Windows): Ctrl+W,W: 浏览器窗口 (浏览橱窗用 ...