编号中的数学_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 ...
随机推荐
- WeQuant交易策略—RSI
RSI指标策略 策略介绍 RSI(相对强弱指标),是通过一段时期内的平均收盘上涨和下跌数,计算价格上涨所产生的波动占整个波动的百分比,来分析市场买卖盘的意向和实力. 计算公式(以日为单位举例) RSI ...
- myeclipse db browser 新建数据源
Myeclipse 新建数据源 一.打开myeclipse(打开了当我没说) 二.在window选项中找到show view ,点击other,输入db,选择DB Browser 三.在DB Brow ...
- SpringMVC基础-controller方法中的参数注解
@PathVariable 映射 URL 绑定的占位符 带占位符的 URL 是 Spring3.0 新增的功能,该功能在 SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义 通过 ...
- .NET Core+Selenium+Github+Travis CI => SiteHistory
前言 总是三分钟热度的我折腾了一个可以每天自动截取指定网站页面并保存到Github的项目SiteHistory,感觉挺好(每次都这样). 想知道YouTube今天的首页长啥样么?点此查看 想知道You ...
- iOS开发笔记17:自定义相机拍照
之前用AVFoundation自定义相机做了拍照与视频相关的东西,为什么要自定义呢?主要是提供更个性化的交互设计,符合app主题,对于视频来说,也便于提供更多丰富有趣的功能.前段时间整理了下拍照部分的 ...
- Jmeter之Bean shell学习(一)
一.什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanS ...
- java值传递与引用传递实例
public class Test2 { public static void main(String[] args) { int[] arr=new int[5]; arr[0]=10; arr[1 ...
- 多线程编程学习四(Lock 的使用).
一.前言 本文要介绍使用Java5中 Lock 对象,同样也能实现同步的效果,而且在使用上更加方便.灵活,主要包括 ReentrantLock 类的使用和ReentrantReadWriteLock ...
- 入侵检测工具之RKHunter & AIDE
一.AIDE AIDE全称为(Adevanced Intrusion Detection Environment)是一个入侵检测工具,主要用于检查文件的完整性,审计系统中的工具是否被更改过. AIDE ...
- Java 多线程(二) 线程的实现
线程的实现 在Java中通过run方法为线程指明要完成的任务,有两种技术来为线程提供run方法: 1.继承Thread类并重写它的run方法.之后创建这个子类的对象并调用start()方法. 2.通过 ...