编号中的数学_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 ...
随机推荐
- 记一次被yield return坑的历程。
事情的经过是这样的: 我用C#写了一个很简单的一个通过迭代生成序列的函数. public static IEnumerable<T> Iterate<T>(this Func& ...
- 扩展Python模块系列(四)----引用计数问题的处理
承接上文,发现在使用Python C/C++ API扩展Python模块时,总要在各种各样的地方考虑到引用计数问题,稍不留神可能会导致扩展的模块存在内存泄漏.引用计数问题是C语言扩展Python模块最 ...
- 百度鹰眼Java接口调用增删改查实例
因感觉百度鹰眼的使用场景比较符合实际业务,于是对百度鹰眼做了简单功能调试.刚开始使用springframework封装的RestTemplate,但是测试提示ak参数不存在.后又试了几种方法,均提示a ...
- linux bash 和 sh的区别
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt189 Linux 中的 shell 有很多类型,其中最常用的几种是: Bou ...
- vim插件ctags的安装与使用
LINUX系统下看程序或者编程序时,看到一个函数经常需要知道该函数的定义,这时ctags就派上用场了,其安装和使用方法如下: 安装方法: sudo apt-get install ctags (ubu ...
- 【.net 深呼吸】WPF 中的父子窗口
与 WinForm 不同,WPF 并没有 MDI 窗口,但 WPF 的窗口之间是可以存在“父子”关系的. 我们会发现,Window 类公开了一个属性叫 Owner,这个属性是可读可写的,从名字上我们也 ...
- 闲话和grunt
一年半没更新是因为自己转岗了,android framework+system转前端,可以想象过程之苦逼,苦成了一首诗:很烦很烦/非常烦/非常非常十分烦/特别烦特烦/极其烦/贼烦/简直烦死了/啊——. ...
- mpls vpn剩余笔记
将IP地址映射为简单的具有固定长度的标签 用于快速数据包交换 20 3 1 8 在整个转发过程中,交换节点仅根据标记进行转发 标签交换路径(LSP) 多协议标签交换MPLS最初是为了提高转发速度而提出 ...
- 【1414软工助教】团队作业7——Alpha冲刺之事后诸葛亮 得分榜
题目 团队作业7--Alpha冲刺之事后诸葛亮 往期成绩 个人作业1:四则运算控制台 结对项目1:GUI 个人作业2:案例分析 结对项目2:单元测试 团队作业1:团队展示 团队作业2:需求分析& ...
- 团队作业3-需求改进&原型设计
选题:实验室报修系统 实验室设备经常会发生这样或那样的故障,靠值班人员登记设备故障现象,维护人员查看故障记录,进行维修,然后登记维修过程与内容,以备日后复查,用这种方式进行设备运营管理,它仅仅起到一个 ...