CF1101D GCD Counting
时间:2019-06-18
本文章向大家介绍CF1101D GCD Counting,主要包括CF1101D GCD Counting使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
思路:
首先预处理分解因子然后树形dp。
实现:
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 200005; 4 int a[N]; 5 vector<int> G[N], F[N], dp[N]; 6 void fac(int x) 7 { 8 for (int i = 2; i * i <= a[x]; i++) 9 { 10 if (a[x] % i == 0) 11 { 12 F[x].push_back(i); 13 dp[x].push_back(1); 14 } 15 while (a[x] % i == 0) a[x] /= i; 16 } 17 if (a[x] != 1) { F[x].push_back(a[x]); dp[x].push_back(1); } 18 } 19 void dfs(int u, int f, int& maxn) 20 { 21 for (int i = 0; i < G[u].size(); i++) 22 { 23 int v = G[u][i]; 24 if (v == f) continue; 25 dfs(v, u, maxn); 26 for (int j = 0; j < F[u].size(); j++) 27 { 28 for (int k = 0; k < F[v].size(); k++) 29 { 30 if (F[u][j] == F[v][k]) 31 { 32 maxn = max(maxn, dp[u][j] + dp[v][k]); 33 dp[u][j] = max(dp[u][j], dp[v][k] + 1); 34 } 35 } 36 } 37 } 38 } 39 int main() 40 { 41 ios::sync_with_stdio(false); 42 int n, x, y; 43 while (cin >> n) 44 { 45 bool flg = true; 46 for (int i = 1; i <= n; i++) 47 { 48 F[i].clear(); dp[i].clear(); G[i].clear(); 49 cin >> a[i]; 50 if (a[i] != 1) flg = false; 51 fac(i); 52 } 53 for (int i = 1; i < n; i++) 54 { 55 cin >> x >> y; 56 G[x].push_back(y); 57 G[y].push_back(x); 58 } 59 if (flg) { cout << 0 << endl; continue; } 60 int maxn = 1; 61 dfs(1, 0, maxn); 62 cout << maxn << endl; 63 } 64 return 0; 65 }
原文地址:https://www.cnblogs.com/wangyiming/p/11043126.html
- 对康托展开的一些心得...
- MySQL 5.7 General Tablespace学习(r11笔记第34天)
- Veeam Backup & Replication(一):安装及配置
- HDUOJ-----Computer Transformation
- Veeam Backup & Replication(二):添加虚拟化主机和配置备份存储
- HDUOJ 2672---god is a girl 《斐波那契数》
- Golang语言--一些基础用法
- 复杂SQL性能优化的剖析(一)(r11笔记第36天)
- hduoj1073--Online Judge
- Golang语言--- channel
- Golang语言--将byte的int转换
- HDUOJ------Daydream字符查找-并求其始末位置
- HDUOJ------敌兵布阵
- 复杂SQL性能优化的剖析(二)(r11笔记第37天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【python-leetcode90-子集】子集Ⅱ
- 【colab pytorch】保存模型
- 【猫狗数据集】保存训练模型并加载进行继续训练
- django-URL匹配(二)
- opengl-球体的绘制
- 【python-leetcode46-子集】全排列
- 【python-leetcode784-子集】字母大小写全排列
- 悬挂引用是如何被Rust消灭的?
- python小例子(二)
- 面试题系列第1篇:说说==和equals的区别?你的回答可能是错误的
- django-URL转换器(四)
- 【猫狗数据集】加载保存的模型进行测试
- 【猫狗数据集】划分验证集并边训练边验证
- 【猫狗数据集】使用学习率衰减策略并边训练边测试
- 面试题系列第2篇:new String()创建几个对象?有你不知道的