编号中的数学_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 ...
随机推荐
- C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码
前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 本篇..基 ...
- [js高手之路]jquery插件开发实战-选项卡详解
在jquery中,插件开发常见的有: 一种是为$函数本身扩展一个方法,这种是静态扩展(也叫类扩展),这种插件一般是工具方法, 还有一种是扩展在原型对象$.fn上面的,开发出来的插件是用在dom元素上面 ...
- WebDriver多浏览器测试
selenium2 基于对象的测试,在selenium2中一共支持以下浏览器: Firefox(FirefoxDriver) IE(InternetExplorerDriver) Chrome(Chr ...
- 转每天一个linux命令(8):cp 命令
cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数.但是如果是 ...
- redis 介绍和常用命令
redis 介绍和常用命令 redis简介 Redis 是一款开源的,基于 BSD 许可的,高级键值 (key-value) 缓存 (cache) 和存储 (store) 系统.由于 Redis 的键 ...
- python的white循环
# _*_coding:utf-8 _*_import datetimename = 'gyf'passd = 123count =0now = datetime.datetime.now()whil ...
- Chome——扩展程序,获取更多扩展程序报错
修改/替换hosts文件 地址:c:/windows/system32/drivers/etc hosts:可从网上搜索下载或网盘下载(链接: http://pan.baidu.com/s/1bpu6 ...
- 【前端基础】动态脚本与JSONP
博主入职两个月了,越来越感受到打好基础对于前端工程师的重要性,在向着狂拽酷炫的框架&构建工具高速狂奔之前,必须有一个坚实的基础打底,才不至于轻易翻车.所以博主最近一直在恶补<JS高级程序 ...
- ActiveMQ笔记——技术点汇总
目录 · Introduction to ActiveMQ · Installing ActiveMQ · Message-oriented middleware · JMS specificatio ...
- window.requestAnimationFrame() ,做逐帧动画,你值得拥有
window.requestAnimationFrame() 方法告诉浏览器您希望执行动画,并请求浏览器调用指定的函数在下一次重绘之前更新动画.该方法使用一个回调函数作为参数,这个回调函数会在浏览器重 ...