1199 Problem B: 大小关系
求有限集传递闭包的 Floyd Warshall 算法(矩阵实现)
zzuoj 1199 题 链接 http://acm.zzu.edu.cn:8000/problem.php?id=1199
Problem B: 大小关系
Time Limit: 2 Sec Memory Limit: 128 MB
Submit: 148 Solved: 31
[Submit][Status][Web Board]
Description
当我们知道一组大小关系之后,可判断所有关系是否都能成立,即关系间没有矛盾。
例如:A<B, A<C, B<C 通过这组关系我们可以得到A<B<C ,所有关系都成立,没有矛盾。
若 A<B, B<C, C<A 通过前两个关系我们得到 A<B<C ,这个关系与C<A矛盾,所有关系不能同时成立。
现在我们知道m个关系,请判断这m个关系是否能成立,成立输出“YES”,否则输出“NO”。
Input
多组数据,每组数据如下:
第一行有一个数字m。 m代表m组关系(1<=m<=400),接下来m行每行有一个关系,用两个不同的字母和一个符号表示。(输入保证字母在‘A’-‘Z’之间,关系符号只有 > , <)
Output
对于每组数据输出“YES”或“NO”.
Sample Input
3
Sample Output
YES
NO
/*********************************************************题解**************************************************************/
大于和小于 其实是一种关系,即两个元素之间的关系,b>a 可以用 a < b 来描述。
题目中所给的就是26
个字母之间的关系,我们可以用0 到25 的整数对应 A 到 Z ,用二维数组来表达元素之间的关系,如 re[0][25]==1 就表示 0
< 25 ,即 A < Z。剩下的就只剩下推理的过程了。
学过 离散数学(上海科学技术文献出本社)的人都知道在 集合论 中 关系的性质中 有一种性质 叫做 传递性 而 < 这种关系就正好具有这种性质,当然小于 并不满足 自反性 和 对称性 这是我们推出矛盾的关键。
关系的的闭包运算 中 有一种闭包运算叫做 求关系 R 的 传递闭包 R+ ,这个 R+ 就是传递的,也就是说 如果在 R+ 中找到 a < b 和 b < c 就一定能找到 a < c ,也就是说 R+ 就是推理过后所得到的关系。
求R+ 的算法:
for(i=0; i<26;++i){
for( j=0;j<26;++j){
if(re[ j ][ i ]){
for( k=0;k<26;++k){
re[ j ][ k ] +=re[ i ][ k] ;
}
}
}
}
就这么多,感谢Warshall
顺便提一句,这个Floyd Warshall 和图论里面的那个经典的Floyd 算法的提出者是一个人,其实这道题也完全可以用图论的方式来做
/***************************************/
AC代码:
# include <iostream>
# include <string.h>
# include <stdlib.h>
# include <math.h>
# include <stdio.h>
# include <algorithm>
# include <stack>
int m,re[ 27 ][ 27 ];
char a,b,c,in[ 4 ];
int main(){
using namespace std;
int i,j,k;
while(~scanf("%d",&m)){
memset(re,0,sizeof(re));
for( i=0; i<m; ++i){
scanf("%s",in);
a=in[ 0 ];
c=in[ 1 ];
b=in[ 2 ];
if(c=='<'){
re[ a-'A' ][ b-'A' ]=1;
}else if(c=='>'){
re[ b-'A' ][ a-'A' ]=1;
}
}
for(i=0; i<26;++i){
for( j=0;j<26;++j){
if(re[ j ][ i ]){
for( k=0;k<26;++k){
re[ j ][ k ]+=re[ i ][ k ];
}
}
}
}
for(i=0;i<26;++i){
for(j=0;j<26;++j)
if(re[ i ][ j ]&&re[ j ][ i ]){
cout << "NO\n";
goto kkk;
}
}
cout << "YES\n";
kkk:;
}
return 0;
}
1199 Problem B: 大小关系的更多相关文章
- [置顶] 如何判断两个IP大小关系及是否在同一个网段中
功能点 判断某个IP地址是否合法 判断两个IP地址是否在同一个网段中 判断两个IP地址的大小关系 知识准备 IP协议 子网掩码 Java 正则表达式 基本原理 IP地址范围 0.0.0.0- 255 ...
- day03变量的命名规范,常量,输出:自带换行,输入,注释,数据类型,运算符,常用字符大小关系
复习 ''' 1.语言的分类 -- 机器语言:直接编写0,1指令,直接能被硬件执行 -- 汇编语言:编写助记符(与指令的对应关系),找到对应的指令直接交给硬件执行 -- 高级语言:编写人能识别的字符, ...
- storm中几个概念的大小关系
从图可以看出来:topology>supervisor>worker>excutor>task; 也就是说一个topology可以运行在多个supervisor上,一个supe ...
- ZZUOJ 1199 大小关系(拓扑排序,两种方法_判断入度和dfs回路判断)
/* 这道题如果按照度为0的节点来判断的时候,将度为0的节点和其相连的节点(度数并减去1) 从图中去掉,如果度为0的节点的个数为0个但是图中的节点没有都去掉的 时候那么说明 出现了回路!用这种方法必须 ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 关于CPU位数,OS位数以及内存大小关系的一点总结
(这个学期做助教,说来好惭愧啊,虽然我也是考研进来的,但是就在两年前复习的资料居然全部都忘光了.对大二的孩子们提问的问题多半都解决不了!!!越来越觉得自己的学习方法有问题了,总是想着一些知识能够根据自 ...
- IAR map 文件报告与Flash 大小关系
- shell 大小关系 -eq -ne
-eq:等于-ne:不等于-le:小于等于-ge:大于等于-lt:小于-gt:大于
- 父进程pid和子进程pid的大小关系
如果进程ID最大值没有达到系统进程数的上限,子进程比父进程ID大.但是如果进程ID达到上限,系统会分配之前分配但是已经退出的进程ID给新进程,这样有可能出现子进程ID比父进程小.
随机推荐
- Asp.Net Mvc 使用WebUploader 多图片上传
来博客园有一个月了,哈哈.在这里学到了很多东西.今天也来试着分享一下学到的东西.希望能和大家做朋友共同进步. 最近由于项目需要上传多张图片,对于我这只菜鸟来说,以前上传图片都是直接拖得控件啊,而且还是 ...
- Elasticsearch 5.0 中term 查询和match 查询的认识
Elasticsearch 5.0 关于term query和match query的认识 一.基本情况 前言:term query和match query牵扯的东西比较多,例如分词器.mapping ...
- 【探索】机器指令翻译成 JavaScript
前言 前些时候研究脚本混淆时,打算先学一些「程序流程」相关的概念.为了不因太枯燥而放弃,决定想一个有趣的案例,可以边探索边学. 于是想了一个话题:尝试将机器指令 1:1 翻译 成 JavaScript ...
- 【探索】在 JavaScript 中使用 C 程序
JavaScript 是个灵活的脚本语言,能方便的处理业务逻辑.当需要传输通信时,我们大多选择 JSON 或 XML 格式. 但在数据长度非常苛刻的情况下,文本协议的效率就非常低了,这时不得不使用二进 ...
- 谈谈一些有趣的CSS题目(八)-- 纯CSS的导航栏Tab切换方案
开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...
- Jenkins的一个bug-同时build一个项目两次导致失败
我们有一个job A, A只是配置了一些参数,它会去触发模板job B. 我一开始点击构建A, 马上发现参数配置不对,于是撤消了构建,但是我没有发现B已经被触发,我重新配置参数,然后再次构建A,这个时 ...
- 作为前端er,写在年末的一些话
写惯了技术类的文章,这种总结和唠嗑型的我基本也就在年末才来一篇.说实话,这种轻松类的文章往往比技术类的要受欢迎的多,因为其受众更广,看起来也不烧脑. 说来愧疚,这一年其实产出有点低,大致就写了不到二十 ...
- Windows10自适应和交互式toast通知[1]
阅读目录: 概述 toast通知的结构 视觉区域(Visual) 行为(Actions) 特定场景下的Toast通知 带多内容的通知 带行为的通知(例子1) 带行为的通知(例子2) 带文本输入框和行为 ...
- JS设计模式(二)
5.迭代器模式 先实现一个简单的迭代器,类似于JQ里的$.each方法. var each = function (arr, callback) { for (var i = 0, l = arr.l ...
- Android开发学习之路-动态高斯模糊怎么做
什么是高斯模糊? 高斯模糊(英语:Gaussian Blur),也叫高斯平滑,是在Adobe Photoshop.GIMP以及Paint.NET等图像处理软件中广泛使用的处理效果,通常用它来减少图像噪 ...