当前位置: 首页 > news >正文

网站建设投标文档网上国网推广

网站建设投标文档,网上国网推广,仿糗事百科网站源码dede二次开发分享+评论+互动,犀牛云做网站多少钱细思极恐,我的能力已经退步到这个地步了吗? 数据结构 这题的修改是强行加进去迷惑你的。 考虑怎么求树的带权重心。 完了我只会树形dp 完了完了 结论:设uuu的子树和为szusz_uszu​,所有点权值和为sss,那么树的带…

细思极恐,我的能力已经退步到这个地步了吗?

数据结构

这题的修改是强行加进去迷惑你的。

考虑怎么求树的带权重心。

完了我只会树形dp

完了完了

结论:设uuu的子树和为szusz_uszu,所有点权值和为sss,那么树的带权重心等价于,满足szu≥⌈s2⌉sz_u\ge \lceil\frac{s}{2}\rceilszu2s且深度最大的点uuu

似乎机房大部分人都想到了这一点,只有我是joker???

道理很简单。显然这个条件是必要的。其次,uuu肯定在根节点所在的重链上,并且满足条件的点一定是重链的一段前缀,容易发现只有这一段前缀的结尾那个点能作为树的重心。

下面的分析就很简单了。

第一种方法,我们只要能确定一个点一定在重心的子树内,然后从这个点往上跳即可。下一步比较构造,考虑在dfn\text{dfn}dfn序中找到第一个满足前缀和≥⌈s2⌉\ge \lceil\frac{s}{2}\rceil2s的点,这个点一定在重心的子树对应的那段dfn\text{dfn}dfn序上,换句话说一定在重心的子树内,往上跳即可。注意树的重心可能有两个,因此uuu的父亲也可能是重心,所以当子树和恰好是s2\frac{s}{2}2s时要返回uuu的父亲。又因为点权可能为零,因此最后要先跳一段000再返回父亲。

第二种方法,记录上一次重心的位置,如果是对链操作,那么新的重心一定在链端点的祖先上,如果是对子树操作,那么新的重心可能在uuu的祖先上,也可能在uuu的重链上,直接在重链上跳即可。

复杂度O(nlog⁡2n)O(n\log^2 n)O(nlog2n)

#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
const int N=3e5+5;
int n,Q,f[N][20],dfn[N],dep[N],tp[N],sz[N],son[N],rk[N],num;
ll sum;
vector<int>g[N];
struct node{ll sum,dat;
}t[N<<2];
void add(int p,int l,int r,ll x){t[p].sum+=(r-l+1)*x,t[p].dat+=x;
}
void pushdown(int p,int l,int r){int mid=l+r>>1;if(t[p].dat){add(p<<1,l,mid,t[p].dat),add(p<<1|1,mid+1,r,t[p].dat),t[p].dat=0;}
}
void pushup(int p){t[p].sum=t[p<<1].sum+t[p<<1|1].sum;
}
void upd(int p,int l,int r,int ql,int qr,ll x){if(ql<=l&&r<=qr){add(p,l,r,x);return;}int mid=l+r>>1;pushdown(p,l,r);if(ql<=mid)upd(p<<1,l,mid,ql,qr,x);if(mid<qr)upd(p<<1|1,mid+1,r,ql,qr,x);pushup(p);
}
ll qry(int p,int l,int r,int ql,int qr){if(ql<=l&&r<=qr)return t[p].sum;int mid=l+r>>1;pushdown(p,l,r);if(qr<=mid)return qry(p<<1,l,mid,ql,qr);if(mid<ql)return qry(p<<1|1,mid+1,r,ql,qr);return qry(p<<1,l,mid,ql,qr)+qry(p<<1|1,mid+1,r,ql,qr);
}
void dfs(int u,int topf){sz[u]=1,f[u][0]=topf,dep[u]=dep[topf]+1;for(int i=1;i<20;i++)f[u][i]=f[f[u][i-1]][i-1];for(auto v:g[u]){if(v!=topf){dfs(v,u),sz[u]+=sz[v];if(sz[v]>sz[son[u]])son[u]=v;}}
}
void dfs2(int u,int topf){tp[u]=topf,dep[u]=dep[topf]+1,dfn[u]=++num,rk[num]=u;if(son[u])dfs2(son[u],topf);for(auto v:g[u]){if(!dfn[v])dfs2(v,v);}
}
int Lca(int x,int y){if(dep[x]<dep[y])swap(x,y);for(int i=19;i>=0;i--)if(dep[f[x][i]]>=dep[y])x=f[x][i];if(x==y)return x;for(int i=19;i>=0;i--)if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];return f[x][0];
}
int query(){int l=1,r=n,res=0;sum=t[1].sum;while(l<=r){int mid=l+r>>1;if(qry(1,1,n,1,mid)>=(sum+1)/2)res=mid,r=mid-1;else l=mid+1;}res=rk[res];if(qry(1,1,n,dfn[res],dfn[res]+sz[res]-1)<(sum+1)/2){for(int i=19;i>=0;i--){int u=f[res][i];if(u&&qry(1,1,n,dfn[u],dfn[u]+sz[u]-1)<(sum+1)/2)res=u;}res=f[res][0];}if(qry(1,1,n,dfn[res],dfn[res]+sz[res]-1)==sum/2){for(int i=19;i>=0;i--){int u=f[res][i];if(u&&qry(1,1,n,dfn[u],dfn[u]+sz[u]-1)==sum/2)res=u;}if(f[res][0])return f[res][0];return res;}return res;
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n;for(int i=1;i<n;i++){int u,v;cin>>u>>v,g[u].pb(v),g[v].pb(u);}cin>>Q;dfs(1,0),dfs2(1,1);for(int i=1;i<=Q;i++){int op,x,y,w;cin>>op>>x>>y;if(op==1){upd(1,1,n,dfn[x],dfn[x]+sz[x]-1,y);}else{cin>>w;int fx=tp[x],fy=tp[y];while(fx!=fy){if(dep[fx]>dep[fy])upd(1,1,n,dfn[fx],dfn[x],w),x=f[fx][0];else upd(1,1,n,dfn[fy],dfn[y],w),y=f[fy][0];fx=tp[x],fy=tp[y];}if(dfn[x]>dfn[y])swap(x,y);upd(1,1,n,dfn[x],dfn[y],w);}cout<<query()<<"\n";} 
} 

签到

吐槽:好好的题,为什么要强行套上高精度这样恶心的东西?单纯为了恶心选手吗?

把容斥的式子写出来:(−1)∣S∣(n+m−(c−1)∣S∣−∑i∈Sbim)(-1)^{|S|}\binom{n+m-(c-1)|S|-\sum_{i\in S}{b^i}}{m}(1)S(mn+m(c1)SiSbi)

然而直接组合数非常难算。但是注意到mmm很小,因此我们可以把组合数看成一个多项式

刚开始想的是一些比较特殊的情况,可以简单递推求出,但是发现对于普通的情况难以处理,感觉数位dpdpdp部分又比较麻烦于是就一无所获了。

首先把nnn转化成bbb进制,然后枚举∣S∣|S|S为什么我想不到正解的思路呢 注意到∑i∈Sbi\sum_{i\in S}b^iiSbi的数位上都是111,因此我们枚举一段前缀就不用考虑负数的情况。问题转化为,从1,2,...,m1,2,...,m1,2,...,m中选kkk个数,记作集合TTT,对于每个i∈[1,m]i\in [1,m]i[1,m],求每种情况下(∑j∈Tbj)i(\sum_{j\in T}b_j)^i(jTbj)i的和。最简单的想法是,每次加入一个数时,用二项式定理暴力展开。这可以用O(n4)O(n^4)O(n4)dpdpdp预处理求出。

总复杂度O(n4)O(n^4)O(n4)一道将数位dpdpdp,容斥,多项式,高精度强行拼凑的辣鸡的毒瘤签到题

爆搜

不会。只会O(2npoly(n))O(2^n\text{poly}(n))O(2npoly(n))的做法。

似乎大家t2都挂分了,但是只有我t2是不会做,我好菜啊???

http://www.hkea.cn/news/798315/

相关文章:

  • 百度爱采购推广平台天津网络推广seo
  • 福州市闽侯县建设局网站推广引流吸引人的文案
  • wordpress目录 读写权限泰安短视频seo
  • 东莞建设网站流程澎湃新闻
  • 萧县住房和城乡建设局网站seo排名推广工具
  • 企业网站php模板下载百度百科官网首页
  • 做愛視頻网站在线网页制作网站
  • 织梦pc怎么做手机网站搜索引擎优化的基础是什么
  • 课程建设网站设计源码爱站网反链查询
  • 安徽省建设业协会网站个人网页制作教程
  • 好的摄影网站推荐福州seo顾问
  • html做的好看的网站如何宣传推广产品
  • 微信手机网站制作怎么引流客源最好的方法
  • 宿州建设网站公司前端seo搜索引擎优化
  • 做王境泽表情的网站百度seo关键词优化排名
  • 怎么选择无锡网站建设虚拟主机搭建网站
  • 做原油期货关注什么网站搜索引擎优化是做什么
  • 微信小程序怎么制作游戏安卓优化清理大师
  • 胶南做网站初学者做电商怎么入手
  • 网站为什么要维护佛山网络营销推广
  • 国企网站建设报告怎么建造自己的网站
  • 免费做司考真题的网站余姚网站如何进行优化
  • 如何网站开发1688网站
  • 丽水专业网站建设价格青岛网站优化
  • 网站开发专业培训学校百度推广登录官网入口
  • 贵阳做网站公司网站热度查询
  • 做课件最好的素材网站考拉seo
  • 网站建设玖首选金手指seo网站优化收藏
  • 台州卓远做网站好不好广州seo教程
  • dz网站数据备份bt磁力猪