2021牛客暑期多校训练营7

文章目录

  • 2021牛客暑期多校训练营7
    • F:xay_loves_trees
      • 解释
      • 代码
    • H:xay_loves_count
      • 解释
      • 代码
    • I:xay_loves_or
      • 解释
      • 代码

F:xay_loves_trees

解释

思考对于第一棵树,当dfs遍历时以u为最深节点,判断它最多能往回走多高(h + 1),那么此时形成的连续链大小为 depth - h。

对于第二棵树,处理好dfs序,一棵树父亲节点的dfs序区间一定包含子树。

对于第一棵树,dfs遍历,当处理到u节点时,先询问它儿子节点的最大值,存入h数组。

然后将它所有的儿子节点,都赋值为depth(u),此时节点的深度,表示这些节点的最近祖先为u。

之后再dfs,维护一条链,dfs到u节点时,维护所有这条链中h的最大值(maxx)。答案为(depth(u) - maxx).

最后取最大值就行了。

上述操作中,维护一个节点所有子节点的值用主席树+标记永久化维护。

代码

#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#include<bits/stdc++.h>
using namespace std;
const int N = 3e5 + 10;
//#define int long long
typedef __int128 lll;
typedef long long ll;vector<int> g1[N],g2[N];
int n;// 主席树部分
int rt[N];#define ls(x) t[x].ls
#define rs(x) t[x].rs
#define d(x) t[x].d
#define lazy(x) t[x].lazystruct LSegmentTree{int ls,rs,d;int lazy;
}t[N << 5];
int LS_idx = 0;int update(int p,int l,int r,int ql,int qr,int val){int root = ++LS_idx;ls(root) = ls(p),rs(root) = rs(p),d(root) = val;if(ql <= l && qr >= r){lazy(root) = val;return root;}int mid = (l + r) >> 1;if(ql <= mid) ls(root) = update(ls(root),l,mid,ql,qr,val);if(qr > mid) rs(root) = update(rs(root),mid+1,r,ql,qr,val);return root;
}int query(int p,int l,int r,int ql,int qr){int ans = lazy(p);if(ql <= l && qr >= r) return max(ans,d(p));int mid = (l + r) >> 1;if(ql <= mid) ans = max(ans,query(ls(p),l,mid,ql,qr));if(qr > mid) ans = max(ans,query(rs(p),mid+1,r,ql,qr));return ans;
}// dfs序
int L[N],R[N],tim;void dfs_dfn(int u,int fa){L[u] = ++tim;for(auto j : g2[u]){if(j == fa) continue;dfs_dfn(j,u);}R[u] = tim;
}// dfs遍历第一棵树
int depth[N],h[N];void dfs(int u,int fa){depth[u] = depth[fa] + 1;h[u] = query(rt[fa],1,n,L[u],R[u]);rt[u] = update(rt[fa],1,n,L[u],R[u],depth[u]);for(auto j : g1[u]){if(j == fa) continue;dfs(j,u);}
} int dfs_ans(int u,int fa,int maxdepth){int nowmaxdepth = max(maxdepth,h[u]);int ans = depth[u] - nowmaxdepth;for(auto j : g1[u]){if(j == fa) continue;ans = max(ans,dfs_ans(j,u,nowmaxdepth));}return ans;
}void init(){for(int i=1;i<=n;i++) g1[i].clear(),g2[i].clear();for(int i=0;i<=LS_idx;i++) rt[i] = ls(i) = rs(i) = d(i) = lazy(i) = 0;tim = LS_idx = 0;
}signed main(){IOSint tt; cin>>tt;while(tt --){cin>>n;init();for(int i=1;i<n;i++){int a,b; cin>>a>>b;g1[a].push_back(b);g1[b].push_back(a);}for(int i=1;i<n;i++){int a,b; cin>>a>>b;g2[a].push_back(b);g2[b].push_back(a);}dfs_dfn(1,0); dfs(1,0);cout<<dfs_ans(1,0,0)<<endl;}return 0;
}

H:xay_loves_count

解释

枚举确定 aia_iai​ 后,枚举 aj,aja_j,a_jaj​,aj​的范围是 1e6ai\frac{1e6}{a_i}ai​1e6​ , 那么总时间复杂度为 ∑11e61e6i\sum_{1}^{1e6}\frac{1e6}{i}∑11e6​i1e6​ , O(nlogn)O(nlogn)O(nlogn)

代码

#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
//#define int long long
typedef long long ll;int cnt[N];signed main(){IOSint n,maxx = 0; cin>>n;for(int i=1,a;i<=n;i++) cin>>a,cnt[a]++,maxx = max(maxx,a);ll ans = 0;for(int i=1;i<=maxx;i++)for(int j=1;i*j<=maxx;j++)ans += cnt[i] * cnt[j] * cnt[j*i];cout<<ans<<endl;return 0;
}

I:xay_loves_or

解释

可以发现,只需要枚举s中所有出现的1的数,和x中出现1的数

  1. 若x出现1的位置而s没出现,则无解
  2. 对于所有出现1的相同的位置(cnt),y可以选择是否选择出现有 2cnt2^{cnt}2cnt种方案
  3. 因为要求正数,所以当 x==sx == sx==s 时,去掉 y == 0的方案。

代码

#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 5e3 + 10;
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
typedef long long ll;int qmi(int a,int b){int res = 1;while(b){if(b & 1) res = res * a;a = a * a;b >>= 1;}return res;
}signed main(){IOSint x,s; cin>>x>>s;map<int,int> mp;bool plas = true;for(int i=0;(s >> i);i++){int j = (s >> i) & 1;if(j) mp[i] = 1;}int cnt = 0;for(int i=0;(x >> i);i++){int j = (x >> i) & 1;if(j){if(!mp[i]){plas = false;}else cnt ++;}}if(!plas) cout<<0<<endl;else{int ans = qmi(2,cnt);if(x == s) ans --;cout<<ans<<endl;}return 0;
}

2021牛客暑期多校训练营7相关推荐

  1. 2021牛客暑期多校训练营9

    2021牛客暑期多校训练营9 题号 题目 知识点 A A Math Challenge B Best Subgraph C Cells D Divide-and-conquer on Tree E E ...

  2. 2021牛客暑期多校训练营5

    2021牛客暑期多校训练营5 题号 题目 知识点 A Away from College B Boxes 概率 C Cheating and Stealing D Double Strings 线性d ...

  3. 2021牛客暑期多校训练营4

    2021牛客暑期多校训练营4 题号 题目 知识点 A Course B Sample Game C LCS D Rebuild Tree E Tree Xor 思维+线段树 F Just a joke ...

  4. 2021牛客暑期多校训练营3

    2021牛客暑期多校训练营3 题号 题目 知识点 A Guess and lies B Black and white C Minimum grid 二分图匹配 D Count E Math 数论+打 ...

  5. 2021牛客暑期多校训练营2

    2021牛客暑期多校训练营2 题号 题目 知识点 A Arithmetic Progression B Cannon C Draw Grids D Er Ba Game E Gas Station F ...

  6. 2021牛客暑期多校训练营1

    2021牛客暑期多校训练营1 题号 题目 知识点 难度 A Alice and Bob 博弈论 B Ball Dropping 计算几何 签到 C Cut the Tree D Determine t ...

  7. 2021牛客暑期多校训练营2,签到题CDFKI

    2021牛客暑期多校训练营2 题号 标题 已通过代码 通过率 团队的状态 A Arithmetic Progression 点击查看 6/72 未通过 B Cannon 点击查看 34/104 未通过 ...

  8. 2021牛客暑期多校训练营1, 签到题DFBG

    2021牛客暑期多校训练营1 题号 标题 已通过代码 通过率 团队的状态 A Alice and Bob 点击查看 1365/5586 通过(博弈论-打表) B Ball Dropping 点击查看 ...

  9. 【训练题66:状压暴力 | 子集dp】Greater Integer, Better LCM | 2021牛客暑期多校训练营5

    题意 Greater Integer, Better LCM | 2021牛客暑期多校训练营5 给你 a,b,ca,b,ca,b,c ,你需要找到一对 x,yx,yx,y ,满足: lcm(a+x,b ...

最新文章

  1. 二维码Data Matrix编码、解码使用举例
  2. linux下的hive命令大全,Hive shell 常用命令
  3. 纽约大学计算机和信息科学专业排名,纽约大学计算机科学与信息系统世界排名2018年最新排名第33(QS世界排名)...
  4. SpringCloud Nacos + Ribbon 调用服务的 2 种方法!
  5. BGP——Peer Group(讲解+配置)
  6. jquery.form.js java_教javascript函数和jquery函数的使用$(form).submit(function()
  7. 003redis事务特性
  8. 实验四+040+薛龚
  9. 机器学习:理解逻辑回归及二分类、多分类代码实践
  10. WebRequest 对象的使用
  11. PIE SDK矢量数据的读取
  12. Android移动应用基础教程【服务】
  13. 基于内容的图像检索技术:从特征到检索
  14. 先学python还是r-r语言和python学哪个?
  15. Linux系统下安装Chrome浏览器
  16. CnOpenData中国上市公司投资者关系管理数据
  17. 计算机专业研究生阶段有几大研究方向可以选择
  18. 网易或入股MSN中国 门户再现竞争新局
  19. @keyup.enter.native不生效问题解决
  20. 修改数据 (通过页面修改数据库数据)

热门文章

  1. 水位报警仪电极式传感器感知水位分级式水位监测
  2. 区块链中一些专业术语的解释
  3. 阿里云服务器重装操作系统流程免费不限次数更换
  4. 数据分析在电商的5个最佳应用
  5. python网络爬虫应用_python网络爬虫应用实战
  6. String类的Intern()方法
  7. Matlab做数据拟合中的(Results,SSE,R-square,Adjusted R-square,RMSE)
  8. DDA画线算法+代码详解-直线扫描算法之一
  9. SRv6测试技术简介
  10. Kaggle-Elo Merchant Category Recommendation案例1%解决方案(特征工程)