• C


    http://codeforces.com/contest/842/problem/C

    树 dp

    一个数的质因数有限,用set存储,去重

      1 #include <cstdio>
      2 #include <cstdlib>
      3 #include <cmath>
      4 #include <cstring>
      5 #include <time.h>
      6 #include <string>
      7 #include <set>
      8 #include <map>
      9 #include <list>
     10 #include <stack>
     11 #include <queue>
     12 #include <vector>
     13 #include <bitset>
     14 #include <ext/rope>
     15 #include <algorithm>
     16 #include <iostream>
     17 using namespace std;
     18 #define ll long long
     19 #define minv 1e-6
     20 #define inf 1e9
     21 #define pi 3.1415926536
     22 #define E  2.7182818284
     23 const ll mod=1e9+7;//998244353
     24 const int maxn=2e5+10;
     25 
     26 struct node
     27 {
     28     int d;
     29     node* next;
     30 }*e[maxn];
     31 
     32 set<int>y[maxn]; //delete one
     33 int a[maxn],x[maxn],value[maxn];
     34 bool vis[maxn]={0};
     35 
     36 void dfs(int d)
     37 {
     38     set<int>::iterator i;
     39     int dd;
     40 
     41     value[d]=x[d];
     42     for (i=y[d].begin();i!=y[d].end();i++)
     43         value[d]=max(value[d],*i);
     44 
     45     node* p=e[d];
     46     vis[d]=1;
     47     while (p)
     48     {
     49         dd=p->d;
     50         if (!vis[dd])
     51         {
     52             x[dd]=__gcd(x[d],a[dd]);
     53             y[dd].insert(x[d]);
     54             for (i=y[d].begin();i!=y[d].end();i++)
     55                 y[dd].insert(__gcd(a[dd],*i));
     56             if (d==1)
     57                 y[dd].insert(a[dd]);
     58             dfs(dd);
     59         }
     60         p=p->next;
     61     }
     62     //free memory
     63     y[d].clear();
     64 }
     65 
     66 int main()
     67 {
     68     node* p;
     69     int n,X,y,i;
     70     scanf("%d",&n);
     71     for (i=1;i<=n;i++)
     72         scanf("%d",&a[i]);
     73     for (i=1;i<n;i++)
     74     {
     75         scanf("%d%d",&X,&y);
     76         p=(node*) malloc (sizeof(node));
     77         p->d=y;
     78         p->next=e[X];
     79         e[X]=p;
     80 
     81         p=(node*) malloc (sizeof(node));
     82         p->d=X;
     83         p->next=e[y];
     84         e[y]=p;
     85     }
     86 
     87     x[1]=a[1];
     88     dfs(1);
     89 
     90     for (i=1;i<n;i++)
     91         printf("%d ",value[i]);
     92     printf("%d",value[i]);
     93     return 0;
     94 }
     95 /*
     96 3
     97 6 10 12
     98 1 2
     99 2 3
    100 */
  • 相关阅读:
    去重
    JavaScript 数组
    变量
    2017.3.19 for
    2017.3.19 if,for
    2017.3.14
    2017.3.10
    2017.3.9
    2017.3.7-1
    2017.3.7
  • 原文地址:https://www.cnblogs.com/cmyg/p/9529971.html
Copyright © 2020-2023  润新知