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

做公司网站的资料青岛建站模板制作

做公司网站的资料,青岛建站模板制作,怎么在印度做网站,seo外链的常见措施AGC034E Complete Compress 洛谷[AGC034E] Complete Compress 题目大意 给你一棵有 n n n个节点的树,并用 01 01 01串告诉你哪些节点上有棋子(恰好一棵)。 你可以进行若干次操作,每次操作可以将两颗距离至少为 2 2 2的棋子向彼…

AGC034E Complete Compress

洛谷[AGC034E] Complete Compress

题目大意

给你一棵有 n n n个节点的树,并用 01 01 01串告诉你哪些节点上有棋子(恰好一棵)。

你可以进行若干次操作,每次操作可以将两颗距离至少为 2 2 2的棋子向彼此移动一步。

问能否通过若干次操作使得所有的棋子都在一个点上。如果能,输出最小操作次数;否则,输出 − 1 -1 1

2 ≤ n ≤ 2000 2\leq n\leq 2000 2n2000

时间限制 3000 m s 3000ms 3000ms,空间限制 1024 M B 1024MB 1024MB


题解

我们可以枚举最后所有棋子聚集在哪个点,设这个点为 r r r,我们设 r r r为根。

d i s u dis_u disu表示 u u u的子树中每个棋子到 u u u的距离,那每一次操作会使 d i s r dis_r disr减少 2 2 2或者不变。我们发现, 如果不变的话,相当于浪费了一次,所以最优的肯定是选择减少 2 2 2

每次减少 2 2 2,要不是在 r r r的一个儿子的 d i s dis dis值减少 2 2 2,要不是在 r r r的两个儿子分别减少 1 1 1。我们考虑什么时候无解,无解就是子树不能抵消完。设 m n u mn_u mnu表示子树 u u u中的棋子在内部操作若干次,直到不能再操作时的 d i s u dis_u disu(也就是需要与其他子树操作的最小次数)。设 v v v u u u的儿子,我们比较 m n v + s i z v mn_v+siz_v mnv+sizv d i s u − d i s v − s i z v dis_u-dis_v-siz_v disudisvsizv的大小( s i z v siz_v sizv表示子树 v v v中的棋子个数):

  • 如果 m n v + s i z v ≤ d i s u − d i s v − s i z v mn_v+siz_v\leq dis_u-dis_v-siz_v mnv+sizvdisudisvsizv,那就是能抵消完,最后剩的就是 m n u = d i s u % 2 mn_u=dis_u\%2 mnu=disu%2
  • 如果 m n v + s i z v > d i s u − d i s v − s i z v mn_v+siz_v>dis_u-dis_v-siz_v mnv+sizv>disudisvsizv,就不能抵消完,那我们拿其他部分来抵消 m n v mn_v mnv m n u = m n v + s i z v − ( d i s u − d i s v − s i z v ) mn_u=mn_v+siz_v-(dis_u-dis_v-siz_v) mnu=mnv+sizv(disudisvsizv)

我们记录 u u u的所有儿子 v v v m n v + d i s v + 2 s i z v mn_v+dis_v+2siz_v mnv+disv+2sizv的最大值 m x u mx_u mxu,然后用这个最大值来与 d i s u dis_u disu作比较即可。

最后,看 m n r mn_r mnr是否为 0 0 0。如果为 0 0 0,则可以抵消完,则用 d i s r / 2 dis_r/2 disr/2来更新答案(这里的 d i s r dis_r disr是最开始的 d i s r dis_r disr);否则,以 r r r为最终聚集的点是无解的。

时间复杂度为 O ( n 2 ) O(n^2) O(n2)

可以参考代码帮助理解。

题外话:这道题还有加强版,题意相同但数据范围更大,加强版的题目和题解请看这篇博客。

code

#include<bits/stdc++.h>
using namespace std;
const int N=1000000;
int n,tot=0,d[2*N+5],l[2*N+5],r[N+5],dep[N+5],siz[N+5];
long long ans=1e18,dis[N+5],mn[N+5],mx[N+5];
char s[N+5];
void add(int xx,int yy){l[++tot]=r[xx];d[tot]=yy;r[xx]=tot;
}
void dfs(int u,int fa){siz[u]=(s[u]=='1');dis[u]=0;mn[u]=0;mx[u]=0;for(int i=r[u];i;i=l[i]){int v=d[i];if(v==fa) continue;dfs(v,u);siz[u]+=siz[v];dis[u]+=dis[v]+siz[v];long long tmp=dis[v]+siz[v]*2+mn[v];mx[u]=max(mx[u],tmp);}if(mx[u]<=dis[u]) mn[u]=dis[u]%2;else mn[u]=mx[u]-dis[u];
}
int main()
{scanf("%d",&n);scanf("%s",s+1);for(int i=1,x,y;i<n;i++){scanf("%d%d",&x,&y);add(x,y);add(y,x);}for(int i=1;i<=n;i++){dfs(i,0);if(mn[i]==0) ans=min(ans,dis[i]/2);}if(ans==1e18) printf("-1\n");else printf("%lld\n",ans);return 0;
}
http://www.yayakq.cn/news/958027/

相关文章:

  • 优秀网站设计赏析wordpress会员支付系统
  • 开发一个网站模版中软属于国企还是央企
  • 电子邮箱网站注册网页论坛
  • 商城建站系统深圳建工集团
  • 开公司做网站北京国互网网站建设电话
  • 如何快速优化网站南京协会网站建设
  • 惠州网站开发公司wordpress迁移
  • 古典风格网站模版app推广接单发布平台
  • 哪种语言做的网站好拼多多卖网站建设
  • wix做网站的建议软考中级哪个含金量高
  • 360网站卖东西怎么做个人签名设计网站
  • 广东网站建设微信官网开发北京网站建设 一流
  • 青县网站建设怎样在本机建设网站
  • 杭州软件开发公司网站广州市恒嘉建设有限公司网站
  • 做视频网站要多少钱贵阳手机银行app
  • python网站开发好吗怎么建设空包网站
  • 公众号视频网站怎么做手机网页小游戏
  • 最受欢迎的网站开发语言市场有率seo tdk
  • 台州市建设规划局网站6佛山网站哪家最专业
  • 汉中城乡建设网站首页网站是先解析后备案吗
  • 河南自助建站建设代理怎么给公司做网站
  • 网站做关键词链接有用吗品牌推广策略包括哪些内容
  • 做网站的公司哪家专业的电商网站建设公司
  • 学风建设网站建立一个公司
  • 同企网站建设做网站重庆企业网站定制开发公司
  • 潍坊高新建设局网站建站公司是什么意思
  • 太原企业做网站网站建设结构框架
  • 南京溧水城市建设集团网站福建省头条新闻
  • 找人做个网站多少钱杭州网站怎么做seo
  • 网站设计设计方案哪里有专门做网站的