题目描述

1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为“小世界现象(small world phenomenon)”的著名假说,大意是说,任何2个素不相识的人中间最多只隔着6个人,即只用6个人就可以将他们联系在一起,因此他的理论也被称为“六度分离”理论(six degrees of separation)。虽然米尔格兰姆的理论屡屡应验,一直也有很多社会学家对其兴趣浓厚,但是在30多年的时间里,它从来就没有得到过严谨的证明,只是一种带有传奇色彩的假说而已。

Lele对这个理论相当有兴趣,于是,他在TJU里对N个人展开了调查。他已经得到了他们之间的相识关系,现在就请你帮他验证一下“六度分离”是否成立吧。

输入

本题目包含多组测试,请处理到文件结束。
对于每组测试,第一行包含两个整数N,M(0<N<100,0<M<200),分别代表TJU里的人数(这些人分别编成0~N-1号),以及他们之间的关系。
接下来有M行,每行两个整数A,B(0<=A,B<N)表示HDU里编号为A和编号B的人互相认识。
除了这M组关系,其他任意两人之间均不相识。

输出

对于每组测试,如果数据符合“六度分离”理论就在一行里输出"Yes",否则输出"No"。

样例输入

8 7
0 1
1 2
2 3
3 4
4 5
5 6
6 7
8 8
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 0

样例输出

Yes
Yes

思路

对于这个题目,可以用邻接矩阵。邻接矩阵表示的是点和点之间的关系。

先建立N行N列矩阵(二维数组)arr[],若两个人互相认识,标记为1。根据图论,矩阵的幂就是两点间通路的长度。arr[]幂为1,通路为1,就是两个人直接互相认识,中间不需要通过第三个人。arr[] x arr[],幂为2,通路为2,需要通过中间人把这两个人联系起来,矩阵中元素就是两点之间距离2的通路的情况个数,如下图。

A(G)2中。V1到V3值为1,因此有一种方式,可以让他俩之间通路为2(需要1个中间人),就是V1-V2,V2-V3。

A(G)2中。V1到V1值为2,因此有两种方式,可以让他俩之间通路为2(需要1个中间人),就是V1-V2,V2-V1和V1-V4,V4-V1。

也就是说,只要任意两个人之间,通路的长度不超过7,就说明可以用六个人将他们联系在一起,需要进行6次矩阵乘法。

最后,若通路为1-6的所有情况相加为0,说明这两个点间没有一个通路,不能通过6的以下的人互相认识。

看代码

#include <iostream>
using namespace std;
const int v = 101;void mul(int arr1[v][v],int arr2[v][v],int arr3[v][v],int m){for(int i=0;i<m;i++){for(int j=0;j<m;j++){for(int k=0;k<m;k++){arr3[i][j]+=arr1[i][k]*arr2[k][j];}}}
}//邻接矩阵乘法,arr1和arr2相乘,存在arr3中。void PrintArr(int arr[v][v],int m){for(int i = 0;i<m;i++){for(int j = 0;j<m;j++){cout<<arr[i][j]<<" ";}cout<<endl;}
}//输出矩阵,用于测试int main(){int m,n;while(cin>>m>>n){int arr[v][v]={0};int A,B;while(n--){cin>>A>>B;arr[A][B]=1;arr[B][A]=1;//储存邻接矩阵,1认识2 和 2认识1都要存进去}int arr1[v][v]={0},arr2[v][v]={0},arr3[v][v]={0},arr4[v][v]={0},arr5[v][v]={0},arr6[v][v]={0},arrSum[v][v]={0};//分别算长度为2....6的通路的个数mul(arr,arr,arr1,m);//求通路为2的矩阵mul(arr1,arr,arr2,m);//求通路为3的矩阵mul(arr2,arr,arr3,m);mul(arr3,arr,arr4,m);mul(arr4,arr,arr5,m);mul(arr5,arr,arr6,m);//求通路为6的矩阵for(int i = 0;i<m;i++){for(int j = 0;j<m;j++){arrSum[i][j]=arr[i][j]+arr1[i][j]+arr2[i][j]+arr3[i][j]+arr4[i][j]+arr5[i][j]+arr6[i][j];}}//若通路为1-6的所有情况相加为0,说明这两个点间没有一个通路,不能通过6的以下的人互相认识。for(int i = 0;i<m;i++){for(int j = 0;j<m;j++){if(i == j){continue;//不用判断自己认识自己的情况。。}if(arrSum[i][j]==0){cout<<"No"<<endl;goto flag;}}}cout<<"Yes"<<endl;flag:;             }
}

HDU-1869 六度分离 (矩阵的幂运算求通路个数)相关推荐

  1. 4.9-4.10 矩阵乘法的性质 矩阵的幂运算 矩阵的转置及其性质

    矩阵乘法的性质 矩阵的乘法不遵守交换律 ! 矩阵乘法遵守结合律.分配律 对于任意r行c列的矩阵A,存在c行x列的矩阵O,满足:A . Ocx = Orx 对于任意r行c列的矩阵A,存在x行r列的矩阵O ...

  2. 位运算求两个数的平均值

    一直不理解位运算求两个数的平均值.参考网上资料后终于明白. 如下: 求两个数的平均值的算法:Avg = (ValueA & ValueB) + (ValueA ^ ValueB) >&g ...

  3. HDU 6185 Covering 矩阵快速幂 递推

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6185 题目描述: 一个4*n的矩形, 你用1*2的矩形覆盖有多少种方案, n <= 1e18 ...

  4. HDU - 5667 Sequence(矩阵快速幂+费马小定理降幂)

    题目链接:点击查看 题目大意:给出函数f(x): 现给出n,a,b,c,mod,求f(n)对mod取模后的结果 题目分析:这个题目相对于前几个题来说稍微加大了点难度,但还是挺水的一个题,首先我们可以对 ...

  5. hdu 6395Sequence【矩阵快速幂】【分块】

    Sequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total ...

  6. HDU 2256(矩阵快速幂)

    传送门 题面: Problem of Precision Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  7. 矩阵快速幂(求斐波那契数列)

    因为Fib(n)至于最近的俩个序列有关(及Fib(n-1)和Fib(n-2)),所以我们保存最近的那俩个就行了. 设f(n)表示一个1*2的矩阵,f(n)=[Fib(n),Fib(n+1)],可以看成 ...

  8. HDU 4382 【矩阵快速幂】【欧拉降幂】

     自己的思路写的 102 × 102 大小的转化矩阵,好在线代学的还行想到用矩阵分块乘法过了- 看其他人的题解用的 3 × 3  构造一个 转化矩阵 T T T ,一个用来存储结果的 P P P  先 ...

  9. 矩阵的幂运算--蓝桥杯

    试题 基础练习 矩阵乘法 题目 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个N阶矩阵A,输出A的M次幂(M是非负整数) 例如: A = 1 2 3 4 A的2次幂 7 1 ...

  10. 用位运算实现四则运算之加减乘除(用位运算求一个数的1/3)

    听同学百度二面中,不准用四则运算操作符来实现四则运算.一想就想到了计算机组成原理上学过的.位运算的思想可以应用到很多地方,这里简单的总结一下用位运算来实现整数的四则运算. 加法运算: int AddW ...

最新文章

  1. 《工业控制网络安全技术与实践》一2.1.3 SCADA 系统未来的技术发展
  2. 【Flask】url_for函数
  3. 14.Java包装类
  4. 最新Angular2案例rebirth开源
  5. python网络编程项目_python网络编程详解
  6. React开发(124):ant design学习指南之form中的validateFields
  7. 【Spring Cloud中文社区】正式启动
  8. hdu2026.java字符
  9. linux gradle仓库位置,如何在Android Studio中使用Gradle发布项目至Jcenter仓库
  10. hibernate 映射表_Hibernate多对多映射-连接表
  11. 手机电子词典_如何把手机变成一款英语学习神器?
  12. excel制作跨职能流程图_一款小白轻松上手流程图绘制工具亿图图示
  13. c语言中girth的作用,C语言课后习题及答案
  14. 曾维沛全网营销推广如何做?微商精准引流,让客户主动找上门
  15. Java发送mail报错“java.util.ServiceConfigurationError: com.sun.mail.imap.IMAPProvider not a subtype”
  16. uni-app 图片上传组件 canvas压缩
  17. CentOS 5遇到Partition table entries are not in disk order
  18. 什么是霍尔推进器?只能推动一张纸,却成为多国追捧的黑科技
  19. 前端「HTML+CSS」零基础入门学习笔记
  20. python - ffmpeg和moviepy:gif 转mp4

热门文章

  1. 商业创新奇才,巧用大数据分析带你穿越古代当首富
  2. 如何添加打印机到电脑
  3. [ROS2基础]launch 文件和多节点进程
  4. VSCode中设置ArcGIS python工具箱.pyt文件代码高亮
  5. 计算机组成原理基本概念,《计算机组成原理》基本概念.doc
  6. qq等级计算机在线,I'M QQ - QQ官方网站
  7. 科技传播杂志科技传播杂志社科技传播编辑部2022年第9期目录
  8. 浏览器全面禁止第三方Cookie
  9. 山西大学量子计算机,山西大学贾晓军课题组:在量子网络的多个节点之间建立和存储确定性量子纠缠...
  10. IEEEtran 的使用及 bibtex的文献类型