zoukankan      html  css  js  c++  java
  • G. Game Design

    #include<bits/stdc++.h>
    #define inf 1e7
    #define ll long long 
    #define int long long 
    #define ull unsigned long long 
    #define PI acos(-1.0)
    #define PII pair<int,int>
    using namespace std;
    const int N = 1e5+7;
    const int p = 998244353;
    int k,num,pa[N],c[N];
    void dfs(int fa,int w,int val){//父亲 任务 权值 
        int u = ++num;
    //    cout<<"=== "<<u<<"  "<<fa<<"  "<<w<<"  "<<val<<"
    ";
        pa[u] = fa;
        c[u] = val;
        w--;
        if(w == 0){
            return ;
        }
        int l = (int)sqrt(w);
        while(w%l!=0) l--;
        int r = w/l;
        dfs(u,l,val>>1ll);
        dfs(u,r,val>>1ll);
    }
    void solve(){
        num = 0;
        scanf("%lld",&k);
        if(k==1){
            printf("2
    1
    2 1
    ");
            return ;
        }
        dfs(0,k,(1ll<<29));
        
        printf("%lld
    ",num);
        for(int i=2;i<=num;++i){
            printf("%lld ",pa[i]);
        }
        printf("
    ");
        for(int i=1;i<=num;++i){
            printf("%lld ",c[i]);
        }
    }
    signed main(){
        int t=1;
        //scanf("%lld",&t);
        for(int _=1;_<=t;++_){
            solve();
        }
        return 0;
    }

     构造一棵节点带权值的树。构造完成后,树上的每个叶子节点都会出现一个怪物,怪物会自底向上进攻根节点,现在你能够在任意个节点建造防御塔,防御塔的建造花费是你构造是给出的点权 cici ,以建造防御塔后的节点为根的子树中的所有怪物都会被防御塔杀死。现在给定一个正整数 KK 代表以最小花费修建防御塔拦截杀死怪物的不同方案数,要求给出这个构造。

    二叉树构建,父节点的方案数等与两个儿子的方案数 相乘+1

    尽量使得两个子树 高度均匀,这样就不会出现单条链的情况,因为我不清楚单条链的情况下 ,总个数会不会超出去,看别人的题解好像是可以的

    由于题目要求个数大于等于2 ,所以特判1的情况

  • 相关阅读:
    Java 基础
    Java 数据类型
    Spring 拦截器实现事物
    SSH 配置日记
    Hibernate 知识提高
    Jsp、Servlet
    leetcode 97. Interleaving String
    leetcode 750. Number Of Corner Rectangles
    leetcode 748. Shortest Completing Word
    leetcode 746. Min Cost Climbing Stairs
  • 原文地址:https://www.cnblogs.com/PdrEam/p/15545032.html
Copyright © 2011-2022 走看看