设为首页 加入收藏

TOP

Codeforces 463E Caisa and Tree dfs+分解质因素(三)
2015-07-20 17:47:18 来源: 作者: 【 】 浏览:10
Tags:Codeforces 463E Caisa and Tree dfs +分解 因素
7,9341,9343,9349,9371,9377,9391,9397,9403,9413,9419,9421,9431,9433,9437,9439,9461,9463,9467,9473,9479,9491,9497,9511,9521,9533,9539,9547,9551,9587,9601,9613,9619,9623,9629,9631,9643,9649,9661,9677,9679,9689,9697,9719,9721,9733,9739,9743,9749,9767,9769,9781,9787,9791,9803,9811,9817,9829,9833,9839,9851,9857,9859,9871,9883,9887,9901,9907,9923,9929,9931,9941,9949,9967,9973};int n, q, ans[N], deep[N]; vector G[N], V[N]; //V[i]是i点的所有质因子, G[i]是图, P[u]和D[u]是有u这个质因子的点 map >P; void dfs(int u, int f, int dep){ ans[u] = -1; deep[u] = dep; for(int i = (int)V[u].size()-1; i >= 0; i--){ int v = V[u][i]; if(P[v].size()==0){P[v].push_back(u);continue;} if(ans[u] == -1 || deep[ans[u]] = 0; i--) if(G[u][i]!=f) dfs(G[u][i], u, dep+1); for(int i = (int)V[u].size()-1; i >= 0; i--){ int v = V[u][i]; P[v].erase(P[v].end()-1); } } void fenjie(int u, int v){ V[u].clear(); for(int j = 0; prime[j]*prime[j] <= v; j++) if(v%prime[j]==0) { V[u].push_back(prime[j]); while(v % prime[j]==0) v /= prime[j]; } if(v != 1) V[u].push_back(v); } void input(){ for(int v, i = 1; i <= n; i++){ scanf("%d",&v); G[i].clear(); fenjie(i, v); } for(int u, v, i = 1; i < n; i++){ scanf("%d %d",&u,&v); G[u].push_back(v); G[v].push_back(u); } } int main(){ int u, v, op; while(~scanf("%d %d", &n,&q)){ input(); dfs(1, -1, 0); while(q--){ scanf("%d %d",&op,&u); if(op==1) printf("%d\n",ans[u]); else { scanf("%d",&v); fenjie(u, v); dfs(1, -1, 0); } } } return 0; }

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Codeforces Round #264 (Div. 2)C.. 下一篇uestcoj 890 Card Trick(dp+逆推)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)
·SQL CREATE INDEX 语 (2025-12-25 01:21:45)
·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)