[intoj#7]最短距离
190227模拟
题目描述给定一张 N 个点的有向图,点 i 到点 j 有一条长度为 i/gcd(i,j) 的边.
有个 Q 询问,每个询问包含两个数 x, y,求从点 x 出发到点 y 的最短距离。
输入格式第一行包含两个用空格隔开的整数 N Q。
接下来 Q 行,每行两个整数 x 和 y。
输出格式
输出 Q 行整数,表示从点 x 出发到点 y 的最短距离。
提示与说明对于30%的数据,1≤N≤100。
对于70%的数据,1≤N≤10^5。
对于100%的数据,1≤x,y≤N≤10^7, Q≤ 10^5。
虽然是求最短路,但这显然是一道数论题。
通过打表找规律,发现答案就是(x/gcd(x,y))的质因数之和。
筛质数的时候,每次把它被整除的最小质因数记下来....反正看代码吧
有个写了个√n的dalao的写法我也不懂,反正我一个一个质数枚举都会t
代码如下
#include<cstdio>
#include<iostream>
#define MogeKo qwq
using namespace std;
const int maxn = 1e7+;
int prime[maxn],p[maxn];
int n,q,x,y,cnt;
bool vis[maxn]; int gcd(int a,int b) {
if(b==)return a;
return gcd(b,a%b);
} int solve(int x) {
int sum = ;
while(x!=) {
sum += p[x];
x /= p[x];
}
return sum;
} void Prime(int N) {
for(int i=; i <= N; i++) {
if(!vis[i]) {
prime[++cnt]=i;
p[i] = i;
}
for(int j=; j<=cnt && prime[j]*i <= N; j++) {
vis[prime[j]*i] = true;
p[prime[j]*i] = prime[j];
if(i%prime[j]==)break;
}
}
} int main() {
scanf("%d%d",&n,&q);
Prime(n);
while(q--) {
scanf("%d%d",&x,&y);
if(x==y) {
printf("0\n");
continue;
}
x /= gcd(x,y);
int ans = solve(x);
if(!ans)ans = ;
printf("%d\n",ans);
}
return ;
}
模拟Prime写崩了QAQQQQ(无能狂怒)
19/3/30
我突然想起来这个好像可以用欧拉函数来做...
不用求素数表,直接根据唯一分解定理从2到n枚举就行了?不知道对不对
int euler(int n){
    int sum = ;
    for(int i = ;i*i <= n;i++)
        while(n%i==){
            sum += i;
            n /= i;
        }
    if(n>) sum += n;
    return sum;
}
[intoj#7]最短距离的更多相关文章
- 点(x3,y3)到经过点(x1,y1)和点(x2,y2)的直线的最短距离
		
/// <summary> /// 点(x3,y3)到经过点(x1,y1)和点(x2,y2)的直线的最短距离 /// </summary> /// <param name ...
 - [ACM_几何] The Deadly Olympic Returns!!!     (空间相对运动之最短距离)
		
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28235#problem/B 题目大意: 有两个同时再空间中匀速运动的导弹,告诉一个时间以 ...
 - 求DAG上两点的最短距离
		
Problem 给出一个不带边权(即边权为1)的有向无环图(unweighted DAG)以及DAG上两点s, t,求s到t的最短距离,如果无法从s走到t,则输出-1. Solution DFS,BF ...
 - HDU 2083 简易版之最短距离 --- 水题
		
HDU 2083 简易版之最短距离 /* HDU 2083 简易版之最短距离 */ #include <cstdio> #include <algorithm> using n ...
 - codeforces 590C C. Three States(bfs+连通块之间的最短距离)
		
题目链接: C. Three States time limit per test 5 seconds memory limit per test 512 megabytes input standa ...
 - hdoj 2083 简易版之最短距离
		
简易版之最短距离 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
 - [LeetCode]Word Ladder 最短距离字符串转换 (Dijkstra)
		
要求最短距离.采纳dijkstra查找节点之间的最短路径. 当心:假设是一个枚举字典22是否元素可以,如果转换,暂停. 提高:每串,带您历数它的字符值事件,对于的长度n一个字符串枚举n*26次要. 设 ...
 - 计蒜客模拟赛D1T2 蒜头君的树:树上节点之间最短距离和
		
题目链接:https://nanti.jisuanke.com/t/16446 题意: 给你一棵有n个节点的树以及每条边的长度,输出树上节点之间的最短距离和.然后进行m次操作,每次操作更改一条边的长度 ...
 - P2453 [SDOI2006]最短距离
		
题目描述 一种EDIT字母编辑器,它的功能是可以通过不同的变换操作可以把一个源串X [l..m]变换为新的目标串y[1..n].EDIT提供的变换操作有: 源串中的单个字符可被删除(delete): ...
 
随机推荐
- 洛谷P3209 [HNOI2010]PLANAR(2-SAT)
			
题目描述 若能将无向图G=(V,E)画在平面上使得任意两条无重合顶点的边不相交,则称G是平面图.判定一个图是否为平面图的问题是图论中的一个重要问题.现在假设你要判定的是一类特殊的图,图中存在一个包含所 ...
 - h5笔记02
			
Markdown 用普通文本描述富文本的语法 扩展名md,markdown 链接:http://wowubuntu.com/markdown/ 代表h标签 没有符号的代表段落 -符号代表无序列表 1. ...
 - 在Win32程序中嵌入Edge浏览器组件
			
代码未经测试,只做个记录 据说只是改了UA. 在注册表修改这个路径,并且把自己程序添加进去,写一个浏览器控件的版本号,只要高于12000就自动改为Edge. For 64bit application ...
 - tkinter——GUI设计实操
			
1.创建root: from tkinter import * root = Tk() root.title('GUI设计') # root.attributes("-alpha" ...
 - MyBatis笔记----SSM框架mybatis3整合springmvc spring4
			
上节 无springmvc框架 http://www.cnblogs.com/tk55/p/6661786.html 结构 jar包 web.xml 与index.jsp <?xml versi ...
 - 回顾:Linux环境 Mysql新建用户和数据库并授权
			
回顾:Linux环境 Mysql新建用户和数据库并授权 一.新建用户 //登录Mysql @>mysql -u root -p @>密码 //创建用户 mysql> insert i ...
 - python连接sqlserver数据库
			
1.准备工作 python3.6连接sqlserver数据库需要引入pymssql模块 pymssql官方:https://pypi.org/project/pymssql/ 没有安装的话需要: pi ...
 - webApi添加视图出现/Index.cshtml”处的视图必须派生自 WebViewPage 或 WebViewPage<TModel>。
			
是因为webApi Views文件夹下缺乏web.config文件,从mvc项目相同目录拷贝一个web.Config文件放入 删除多余的namespaces 即可 web.config配置如下: &l ...
 - phprpc的使用示例以及报错Fatal error: Cannot redeclare gzdecode() in D:\wamp\www\immoc\phprpc\compat.php 处理
			
今天看书,发现了PHPRPC这个好东东,故在此写下来以作笔记. PHPRPC 是一个轻型的.安全的.跨网际的.跨语言的.跨平台的.跨环境的.跨域的.支持复杂对象传输的.支持引用参数传递的.支持内容输出 ...
 - LeetCode算法题-Same Tree(Java实现)
			
这是悦乐书的第162次更新,第164篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第21题(顺位题号是100).给定两个二叉树,编写一个函数来检查它们是否相同.如果两个二 ...