Caisa and Tree

在dfs的过程中枚举质因子瞎搞搞就好啦, 不过这个题意真的表述不清。。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PLL pair<LL, LL>
#define PLI pair<LL, int>
#define PII pair<int, int>
#define SZ(x) ((int)x.size())
#define ull unsigned long long
using namespace std;const int N = 1e5 + 7;
const int M = 2e6 + 7;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e6 + 3;
const double eps = 1e-8;int n, q, a[N], ans[N], depth[N];
bool prime[M];
vector<int> pfac[M];
vector<PII> Set[M];
vector<int> G[N];void dfs(int u, int fa) {depth[u] = depth[fa] + 1;ans[u] = -1;for(auto& t : pfac[a[u]])if(SZ(Set[t]) && (ans[u] == -1 || Set[t][SZ(Set[t])-1].fi > depth[ans[u]]))ans[u] = Set[t][SZ(Set[t])-1].se;for(auto& t : pfac[a[u]])Set[t].push_back(mk(depth[u], u));for(auto& v : G[u]) {if(v == fa) continue;dfs(v, u);}for(auto& t : pfac[a[u]])Set[t].pop_back();
}int main() {memset(prime, true, sizeof(prime));prime[0] = prime[1] = false;for(int i = 2; i < M; i++) {if(!prime[i]) continue;pfac[i].push_back(i);for(int j = i + i; j < M; j += i)prime[j] = false, pfac[j].push_back(i);}scanf("%d%d", &n, &q);for(int i = 1; i <= n; i++) scanf("%d", &a[i]);for(int i = 1; i < n; i++) {int u, v; scanf("%d%d", &u, &v);G[u].push_back(v);G[v].push_back(u);}dfs(1, 0);while(q--) {int op, v, w;scanf("%d%d", &op, &v);if(op == 1) {printf("%d\n", ans[v]);} else {scanf("%d", &w);a[v] = w;dfs(1, 0);}}return 0;
}/*
*/

转载于:https://www.cnblogs.com/CJLHY/p/10403544.html

Codeforces 463E Caisa and Tree相关推荐

  1. Educational Codeforces Round 25 G. Tree Queries

    题目链接:Educational Codeforces Round 25 G. Tree Queries 题意: 给你一棵树,一开始所有的点全是黑色,有两种操作. 1 x 将x这个点变为黑色,保证第一 ...

  2. Codeforces 1129 E.Legendary Tree

    Codeforces 1129 E.Legendary Tree 解题思路: 这题好厉害,我来复读一下官方题解,顺便补充几句. 首先,可以通过询问 \(n-1​\) 次 \((S=\{1\},T=\{ ...

  3. Codeforces #1248B Grow The Tree题解(Java)

    Codeforces #1248B Grow The Tree题解(Java) 题目大意: 输入: 输出: 数据范围: 思路 代码 题目链接 题目大意: 给出一组线段(题目中叫树枝)的长度,制作成一条 ...

  4. CodeForces - 609E Minimum spanning tree for each edge(最小生成树+树链剖分+线段树/树上倍增)

    题目链接:点击查看 题目大意:给出一张 n 个点和 m 条边组成的无向图,现在询问包含每一条边的最小生成树 题目分析:考虑求解次小生成树的思路: 求出最小生成树 ans 枚举每一条非树边 ( u , ...

  5. CodeForces - 620E New Year Tree(线段树+dfs序+状态压缩)

    题目链接:点击查看 题目大意:给出一棵无向树,每个节点都有一种颜色,接下来时m次操作: 1 x y:将x及其子树染成y的颜色 2 x:查询x及其子树上共有多少种不同的颜色 题目分析:看完这个题的第一反 ...

  6. Codeforces 699D Fix a Tree 并查集

    原题:http://codeforces.com/contest/699/problem/D 题目中所描述的从属关系,可以看作是一个一个块,可以用并查集来维护这个森林.这些从属关系中会有两种环,第一种 ...

  7. Codeforces 1278 D.Segment Tree(排序+set)

    题目链接:https://codeforces.com/contest/1278/problem/D 题目大意: 给定一堆线段[li,ri],每个线段的端点都不一样,如果两个线段相交,那么他们必须是有 ...

  8. CodeForces - 1287D Numbers on Tree(dfs+stl)

    题目链接:点击查看 题目大意:给出一棵有根树,每个节点都有一个权值,代表的是在其子树中有多少个节点的val比他小,现在要求根据每个点的权值构造出1~n的val数列 题目分析:因为数据量不大,n只有2e ...

  9. CodeForces - 618D Hamiltonian Spanning Tree(思维+贪心)

    题目链接:点击查看 题目大意:首先给出n个点,n*(n-1)/2条边组成的无向图,边的权值为y,现在给出一棵连接n个点的树,树上的权值都是x,现在问如何在每个点只遍历一次的情况下走遍n个点,并使一路上 ...

最新文章

  1. 那些想坐等AI成熟再采用的公司,可能永远也跟不上AI浪潮
  2. 通过Matrix进行二维图形仿射变换
  3. 深度学习笔记4:Self-Taught Learning and Unsupervised Feature Learning
  4. jQuery UI Widget(1.8.1)工作原理--转载
  5. Android基于监听的事件处理机制
  6. 程序员该做的事 - 每天、每周、每月
  7. hdu 4966 最小树形图
  8. Codeforces Round #643 (Div. 2)(AB)
  9. 问题 I: 连通块计数
  10. 设置单元格填充方式_【WPS神技能】Excel表格中单元格内的双色填充效果有点意思!...
  11. 微软随.NET 4.5发布新REST API框架
  12. EPSON机械手视觉操作手册
  13. Python修改图片格式
  14. python多变量相关性分析_两个变量与因变量相关性分析_spss多变量相关性分析
  15. docker部署homeassistant
  16. android如何截屏快捷键,安卓手机怎么截图 各大品牌快捷键截屏大集合
  17. DNS服务器存在问题需要修复,dns服务(dns异常怎么都修复不了)
  18. 一、barrier指令DSB,DMB,ISB,fence——内存屏障,指令屏障
  19. 2022年全球市场柠檬酸酯总体规模、主要生产商、主要地区、产品和应用细分研究报告
  20. 帆软部署服务器linux,部署集成

热门文章

  1. 常用深度学习模型介绍(1)
  2. LUA脚本调用C场景,使用C API访问脚本构造的表
  3. 基于jQuery的图片异步加载和预加载实例
  4. 本人转行,出售二手.net书籍和源码,书籍3-4折,都是新华书店原版书。
  5. ASP.NET 购物车
  6. VS2012设置断点的方法
  7. access实验报告体会_Access实验报告 - 图文
  8. mysql场景测试_【干货】不同场景下 如何进行MySQL迁移
  9. 5-1rquests模拟登陆知乎之httpcode
  10. 【连载】物联网全栈教程-从云端到设备(十三)---安装单片机编译环境