Codeforces 842C
来源:互联网 发布:淘宝夏宽 编辑:程序博客网 时间:2024/06/17 19:50
**【题意】
给出一棵生成树,每个节点都有一个值,现在要求出每个节点的美丽值的最大值,美丽值的定义为从根节点到该节点(包含)路径上所有点的值的gcd,求解每个点时可以把路径上某一个点的值变为0。你可以认为每个点美丽值的求解是独立的。**
别人的代码ac。。
#include <bits/stdc++.h>using namespace std;const int maxn=2e5;int n;int A[maxn+10],dp[maxn+10][2],fa[maxn+10];vector<int>g[maxn+10];set<int>s[maxn+10];void dfs(int v,int p,int b){ for(int w:s[p])s[v].insert(__gcd(w,A[v])); s[v].insert(b); b=__gcd(b,A[v]); s[v].insert(b); for(int w:g[v])if(w!=p)dfs(w,v,b);}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",A+i); int u,v; for(int i=1;i<n;i++){ scanf("%d%d",&u,&v); g[u].push_back(v); g[v].push_back(u); } dfs(1,0,0); for(int i=1;i<=n;i++) printf("%d ",*s[i].rbegin()); return 0;}
我的代码wa4
int val[N];const int maxn=2e5;int fst[N],nxt[N<<1],to[N<<1],e;vector<int>g[maxn+10];set<int>s[maxn+10];set<int>::iterator it;void dfs(int u,int fa,int c){ for(it=s[u].begin();it!=s[u].end();++it)s[u].insert(__gcd(*it,val[u])); s[u].insert(c); c=__gcd(c,val[u]); s[u].insert(c); for(int i=0;i<g[u].size();++i)if(g[u][i]!=fa)dfs(g[u][i],u,c);}int main(){ int n;sf("%d",&n); mem(fst,-1);e=0; rep(i,1,n)sf("%d",&val[i]); rep(i,1,n-1){ int u,v;sf("%d%d",&u,&v);g[u].push_back(v);g[v].push_back(u);} dfs(1,0,0); rep(i,1,n)pf("%d%c",*s[i].rbegin(),i==n?'\n':' ');}
原本以为可以dp ,但其实是不可以的。。。谢谢提醒
int gcd(int a,int b){ if(b>a)swap(a,b);return b==0?a:gcd(b,a%b); }int dp[N][2],ans[N];void add(int u,int v){ to[e]=v;nxt[e]=fst[u];fst[u]=e++;}void dfs(int u,int fa){ dp[u][0]=gcd(dp[fa][0],val[u]); dp[u][1]=max(dp[fa][0],gcd(dp[fa][1],val[u])); ans[u]=max(dp[u][0],dp[u][1]); for(int i=fst[u];~i;i=nxt[i]){ int v=to[i]; if(v==fa)continue; dfs(v,u); }}int main(){ int n;sf("%d",&n); mem(fst,-1);e=0; rep(i,1,n)sf("%d",&val[i]); mem(dp,0); rep(i,1,n-1){ int u,v;sf("%d%d",&u,&v);add(u,v);add(v,u); } dp[1][0]=val[1]; dfs(1,1); //rep(i,1,n)pf("%d %d\n",dp[i][0],dp[i][1]); rep(i,1,n)pf("%d%c",ans[i],i==n?'\n':' ');}
阅读全文
0 0
- Codeforces 842C
- Codeforces 842C
- Codeforces 842C(思维)
- Codeforces 842C
- codeforces 842C dp
- Codeforces 842C Ilya And The Tree
- Codeforces 842 C Ilya And The Tree
- Codeforces-340-C(c++)
- Codeforces-507-C(c++)
- CodeForces 731C C
- CodeForces-612C C
- CODEFORCES 265C CODEFORCES, 265C
- codeforces #78 div2 C
- Codeforces 117C Cycle
- CodeForces 209C
- CodeForces 156C Cipher
- codeforces 148 div2 C
- codeforces 242C
- 将语句中的单词扣出来,并排序的wordSearch类
- android 原生Sqlite使用总结
- 段错误(核心已存储)
- 10. Regular Expression Matching (dp)
- JDBC连接sql server 2008数据库
- Codeforces 842C
- Android Kotlin TextView跑马灯效果
- 多级指针的应用一(字符串的切割)
- IOS应用如何模糊(blur)图片
- java面试题--已知先序和中序遍历求后序遍历
- (扩展欧几里得)Modular Inverse--Zoj
- Logistic的损失函数的推导.
- Java多线程之旅(一)
- Vue.js指令