博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019西北工业大学程序设计创新实践基地春季选拔赛 I Chino with Rewrite (并查集+树链剖分+线段树)...
阅读量:4963 次
发布时间:2019-06-12

本文共 2057 字,大约阅读时间需要 6 分钟。

链接:https://ac.nowcoder.com/acm/contest/553/I

思路:离线整棵树,用并查集维护下联通的情况,因为值只有60个,用2的x(1<=x<=60)次方表示,树链剖分线段树区间取或维护,取得的值只要数二进制里面有多少个1就代表有多少个相同的数。

实现代码;

#include
using namespace std;#define ll long long#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define mid ll m = (l + r) >> 1const int M = 3e5+10;ll sum[M<<2],f[M],head[M],son[M],siz[M],fa[M],dep[M];ll cnt,cnt1,n,tid[M],top[M],a[M],op[M],u[M],v[M],ans[M];struct node{ ll to,next;}e[M];ll Find(ll x){ if(x == f[x]) return x; return f[x] = Find(f[x]);}void add(ll u,ll v){ e[++cnt1].to=v;e[cnt1].next=head[u];head[u]=cnt1; e[++cnt1].to=u;e[cnt1].next=head[v];head[v]=cnt1;}void dfs1(ll u,ll faz,ll deep){ dep[u] = deep; siz[u] = 1; fa[u] = faz; //cout<
<<" "<
<<" "<
<
siz[son[u]]) son[u] = v; } }}void dfs2(ll u,ll t){ top[u] = t; tid[u] = cnt; //cout<<1<
= r){ return sum[rt]; } mid; ll ret = 0; if(L <= m) ret |= query(L,R,lson); if(R > m) ret |= query(L,R,rson); return ret;}ll solve(ll x){ ll ans = 0; while(x){ ans++; x -= (x&-x); } return ans;}ll ask(ll x,ll y){ ll ans = 0; ll fx = top[x],fy = top[y]; while(fx != fy){ if(dep[fx] < dep[fy]) swap(x,y),swap(fx,fy); ans |= query(tid[fx],tid[x],1,n,1); x = fa[fx]; fx = top[x]; } if(dep[x] > dep[y]) swap(x,y); ans |= query(tid[x],tid[y],1,n,1); return ans;}int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll q; cnt = 1; cin>>n>>q; memset(son,-1,sizeof(son)); for(ll i = 1;i <= n;i ++){ cin>>a[i];f[i] = i; } for(ll i = 1;i <= q;i ++){ cin>>op[i]>>u[i]>>v[i]; if(op[i] == 1){ ll fx = Find(u[i]),fy = Find(v[i]); if(fx != fy) f[fx] = fy,add(u[i],v[i]),ans[i]=1; } else{ ll fx = Find(u[i]),fy = Find(v[i]); if(fx != fy) ans[i] = -1; } } dfs1(1,0,1); dfs2(1,0); for(ll i = 1;i <= q;i ++){ if(op[i] == 1&&ans[i]==1){ ll num = (a[u[i]] + a[v[i]])/2; a[u[i]] = a[v[i]] = num; update(tid[u[i]],1LL<
<= q;i ++) if(op[i] == 2) cout<
<

 

转载于:https://www.cnblogs.com/kls123/p/10672641.html

你可能感兴趣的文章
2018 Multi-University Training Contest 10 - Count
查看>>
HDU6203 ping ping ping
查看>>
《人人都是产品经理》书籍目录
查看>>
如何在git bash中运行mysql
查看>>
OO第三阶段总结
查看>>
构建之法阅读笔记02
查看>>
DataTable和 DataRow的 区别与联系
查看>>
检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败
查看>>
mysql数据库中数据类型
查看>>
Fireworks基本使用
查看>>
两台电脑间的消息传输
查看>>
Linux 标准 I/O 库
查看>>
.net Tuple特性
查看>>
Java基础常见英语词汇
查看>>
iOS并发编程笔记【转】
查看>>
08号团队-团队任务5:项目总结会
查看>>
SQL2005 删除空白行null
查看>>
mysql备份与恢复
查看>>
混沌分形之迭代函数系统(IFS)
查看>>
边框圆角Css
查看>>