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

网站建设设计制作长沙seo智优营家

网站建设设计制作,长沙seo智优营家,怎样做网站分析总结,根据百度地图做网站细思极恐,我的能力已经退步到这个地步了吗? 数据结构 这题的修改是强行加进去迷惑你的。 考虑怎么求树的带权重心。 完了我只会树形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.zhongyajixie.com/news/29632.html

相关文章:

  • 陈村网站建设百度客户端下载安装
  • 建设银行辽宁招聘网站sem竞价推广代运营
  • 郑州动力无限网站建设app营销十大成功案例
  • 做网站的软件电子新浪体育nba
  • 自建网站经营者例子google关键词查询工具
  • 淮安网站制作脱发严重是什么原因引起的
  • 怎么查公司地址百度竞价关键词优化
  • 创建网站收费接广告推广
  • 做网站就上微赞网网络营销渠道类型有哪些
  • 山东免费网站建设门户网站软文
  • 怎么做PayPal网站收款怎么做百度推广运营
  • 永康做网站周口seo公司
  • 电子商务公司网站怎么建系统优化软件哪个最好的
  • 网站推广广告公司博客网站登录入口
  • 发布php做的网站seo建站技术
  • 用代码怎么做网站seo系统培训班
  • 网上如何建网站怎么自己做一个小程序
  • 深圳做网站的好公司关键词搜索名词解释
  • 网站建设需要哪些成本信息流推广的竞价机制是
  • 做直播网站需要学什么软件有哪些独立站搭建要多少钱
  • 域名未做运行网站解析大数据查询
  • 竞价开户seo排名外包
  • 宣传图制作网站营销推广有哪些公司
  • 出名的网站有哪些什么是关键词广告
  • 完全自建网站360优化大师下载
  • 做蔬菜配送有什么网站可下载了解如何推广微信公众号
  • 做网站年薪百万网站seo方案撰写
  • 网站建设 英语翻译网站推广优化排名公司
  • 网站导航栏按钮网站推广app
  • 爱站网权重查询百度推广入口官网