编号中的数学_KEY
题目描述:
从美国州际高速公路建筑者那里,奶牛们引进了一种路径编号系统,来给牧场之间的道路编号。他们已经把 N(1<=N<=25)个牧场,用 1 到 N 的整数编号。现在他们需要将牧场间的道路也编上不同的编号,编号可以从 1 到 2000.如:I9 和 I16。看下面一个例子,牧场编号为 1,2,3,4,道路编号为 I3,I6,I9,I16。贝茜喜欢从牧场 1 散步到牧场 2,在每次散步中,她从不经过同一个牧场两次或两次以上,所以,在上面的地图中,可能 的路径只有 1-4-2 和 1-3-2。在最近的几年中,贝茜已经具有了惊人的数学功底。所以,现在她想练习练习,在每次散步中,她记录下她所经过的道路的最大公约数。例如,在路径 1-4-2 中,她经过了 I16 和I6,它们的最大公约数是 2.她每天尝试一种不同的走法,在走完所有路径之后,她将所有的最大公约数集中起来。计算出它们的最小公倍数。例如:在上面例子中两个最大公约数分别是 2 和 3,所以最小公倍数是 6.对于很大的地图,贝茜要走完所有的路径是很累的。但是,她仍然想知道那个最小公倍数。请你帮助她。
输入格式:
第 1 行输入 N。接下来 N 行,输入一个邻接矩阵,第 I 行第 J 列表示从 I 到 J 的道路的编号。如果 I 到 J 没有道路相连,用 0 表示。
输出格式:
一个整数表示所有从 1 到 2 的路径的最大公约数的最小公倍数。这个数不超过 100 位。
输入样例:
4
0 0 3 16
0 0 9 6
3 9 0 0
16 6 0 0
输出样例:
6
看这个数据范围,就知道是DFS,但是数据稍稍有点大。
定义DFS(x,y),表示到第x个点,最大公因数为y。
对于这个DFS函数,我们可以加一个很强力的最优性剪枝。
如果当前的ans(最小公倍数),取p=gcd(map[x][i],y),如果ans%p==0就return。
可以这样想,如果ans%p==0,那么之后无论如何gcd也不能使ans改变。
code:
#include <bits/stdc++.h>
using namespace std;
long long n,a[][],t[];
long long ans=,w;
long long gcd(long long x,long long y){return !y?x:gcd(y,x%y);}
void dfs(int x,int y){
if(x==){long long p=gcd(y,ans);ans*=y;ans/=p;return ;}
for(int i=;i<=n;i++){
if(a[x][i]&&!t[i]){
long long o=a[x][i],q=y;
if(o<q)swap(o,q);
long long p=gcd(o,q);
if(ans%p)t[i]=,dfs(i,p),t[i]=;
}
}
}
int main(void){
scanf("%lld",&n);
for(int i=;i<=n;i++){
for(int j=;j<=n;j++)scanf("%lld",&a[i][j]);
}
t[]=;
for(int i=;i<=n;i++){
if(a[][i])t[i]=,dfs(i,a[][i]),t[i]=;
}
printf("%lld",ans);
return ;
}
编号中的数学_KEY的更多相关文章
- 借One-Class-SVM回顾SMO在SVM中的数学推导--记录毕业论文5
上篇记录了一些决策树算法,这篇是借OC-SVM填回SMO在SVM中的数学推导这个坑. 参考文献: http://research.microsoft.com/pubs/69644/tr-98-14.p ...
- shell脚本中的数学运算
shell中的赋值和操作默认都是字符串处理,在此记下shell中进行数学运算的几个特殊方法.以后用到的时候能够来看,呵呵 1.错误方法举例 a) var=1+1 echo $var 输出的结果是1+1 ...
- Bash中的数学扩展
Bash只支持整数运算,不支持浮点运算.如果需要进行浮点运算,需要使用bc程序.Bash中的数学扩展有两种形式:$[ expression ]或$(( expression )) 例子:$echo $ ...
- Shell脚本笔记(三)shell中的数学计算
shell中的数学计算 一.使用方括号 #!/bin/bash a= b= c= res=$[$a * ($c-$b)] echo $res 二.使用(()) +)) ((i=+)) b=$((-*) ...
- word2vec 中的数学原理三 背景知识 语言模型
主要参考: word2vec 中的数学原理详解 自己动手写 word2vec
- word2vec 中的数学原理二 预备知识 霍夫曼树
主要参考: word2vec 中的数学原理详解 自己动手写 word2vec 编码的话,根是不记录在编码中的 这一篇主要讲的就是霍夫曼树(最优二叉树)和编码. ...
- word2vec中的数学原理一 目录和前言
最近在看词向量了,因为这个概念对于语言模型,nlp都比较重要,要好好的学习一下.把网上的一些资料整合一下,搞个系列. 主要参考: word2vec 中的数学原理详解 ...
- Unity3D中Mathf数学运算函数总结
引入: 看到一个案例注意到函数Mathf.SmoothDamp的使用,游戏中用于做相机的缓冲跟踪和boss直升机跟踪士兵.该函数是Unity3D中Mathf数学运算函数中的一个.一些游戏使用了smoo ...
- 图像处理中的数学原理具体解释21——PCA实例与图像编码
欢迎关注我的博客专栏"图像处理中的数学原理具体解释" 全文文件夹请见 图像处理中的数学原理具体解释(总纲) http://blog.csdn.net/baimafujinji/ar ...
随机推荐
- Spring MVC请求执行流程
学习Spring MVC时间有点长了,但是最近打算找工作,需要重新了解下,所以又去温故知新了.Spring MVC就是用来写web的框架,简化你写web的一些不必要的流程,让程序员能专注于业务逻辑也就 ...
- MySql数据库导入导出
1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 存放位置 比如: mysqldump -u root -p project > c:/a. ...
- C++内存布局详解
一个由C/C++编译的程序除了存放函数二进制代码的程序代码段(code段)外,数据占用的内存大致分为以下几个部分: 1.栈区(stack) 存放局部变量.函数参数.返回数据.返回地址等.系统自动分配释 ...
- HAproxy功能配置
author:JevonWei 版权声明:原创作品 haproxy配置文档 https://cbonte.github.io/haproxy-dconv/ 环境 前端HAProxy 172.16.25 ...
- 关于用VMware克隆linux系统后,无法联网找不到eth0网卡的问题
当使用克隆后的虚拟机时发现系统中的网卡eth0没有了,使用ifconfig -a会发现只有eth1.因为系统是克隆过来的,原有的eth0以及ip地址都是原先网卡的,VMware发现已经被占用,就会创建 ...
- ssh keys管理工具
原文地址:https://rtyan.github.io/%E5%B7%A5%E5%85%B7/2017/09/12/ssh-keys-manager.html 引言 我有两个github账户,一个是 ...
- Azure Powershell对ARM资源的基本操作
本分主要介绍Windows Azure Powershell对ARM资源的基本操作 1.登陆ARM模式,命令:Login-AzureRmAccount -EnvironmentName AzureCh ...
- 【小白成长撸】--Fibonacci
/*程序的版权和版本声明部分: *Copyright(c) 2016,电子科技大学本科生 *All rights reserved. *文件名:Fibonacci *程序作用:计算菲薄拉稀数列 *作者 ...
- 201521123029《Java程序设计》第五周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 答:1. 课上讲了匿名内部类的使用,其中内部类就是定义在另一个类里面的类,与之相 ...
- 201521123078《Java程序设计》第1周学习总结
1. 本周学习总结 简单的了解JVM,JRE,JDK,编写简单的Java程序 2. 书面作业 为什么java程序可以跨平台运行?执行java程序的步骤是什么?(请用自己的语言书写) 通过JVM虚拟机, ...