CF708C Centroids

题意翻译

给定一颗树,你有一次将树改造的机会,改造的意思是删去一条边,再加入一条边,保证改造后还是一棵树。

请问有多少点可以通过改造,成为这颗树的中心?(如果以某个点为根,每个子树的大小都小于n/2​,则称某个点为中心)

sol:先找到整颗树的重心,然后对于每个点,肯定是把重心的最大子树串过来最优(XJByy一下),如果这个点在最大子树中,就搞来次大子树,或者把除了最大子树的剩下一大坨串过来

#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{ll s=0; bool f=0; char ch=' ';while(!isdigit(ch)) {f|=(ch=='-'); ch=getchar();}while(isdigit(ch)) {s=(s<<3)+(s<<1)+(ch^48); ch=getchar();}return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{if(x<0) {putchar('-'); x=-x;}if(x<10) {putchar(x+'0'); return;}write(x/10); putchar((x%10)+'0');
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=400005,M=800005;
int n,rt,t1=0,t2=0,sz[N],mx[N];
int tot=0,Next[M],to[M],head[N];
bool bo[N];
inline void Link(int x,int y)
{Next[++tot]=head[x]; to[tot]=y; head[x]=tot;
}
inline void getrt(int x,int fat)
{int e; sz[x]=1; mx[x]=0;for(e=head[x];e;e=Next[e]) if(to[e]!=fat){getrt(to[e],x); sz[x]+=sz[to[e]]; mx[x]=max(mx[x],sz[to[e]]);}mx[x]=max(mx[x],n-sz[x]); if(mx[x]<mx[rt]) rt=x;
}
inline void dfs(int x,int fat)
{int e; sz[x]=1;for(e=head[x];e;e=Next[e]) if(to[e]!=fat){dfs(to[e],x); sz[x]+=sz[to[e]];}
}
inline void draw(int x,int fat)
{int e; bo[x]=1;for(e=head[x];e;e=Next[e]) if(to[e]!=fat){draw(to[e],x);}
}
int main()
{freopen("data.in","r",stdin);int i,x,y;R(n);for(i=1;i<n;i++){R(x); R(y); Link(x,y); Link(y,x);}mx[rt=0]=n+1; sz[0]=0; getrt(1,0); dfs(rt,0);for(i=head[rt];i;i=Next[i]){if(sz[to[i]]>sz[t1]) t2=t1,t1=to[i];else if(sz[to[i]]>sz[t2]) t2=to[i];}if(t1) draw(t1,rt);
//    cout<<"rt="<<rt<<endl;
//    for(i=1;i<=n;i++) cout<<bo[i]<<' '; puts("");for(x=1;x<=n;x++){if(!bo[x]){if((n-sz[x]-sz[t1])*2<=n) putchar('1');else putchar('0');}else{if((n-sz[x]-sz[t2])*2<=n) putchar('1');else if((n-sz[t1])*2<=n) putchar('1');else putchar('0');}putchar(' ');}return 0;
}

View Code

转载于:https://www.cnblogs.com/gaojunonly1/p/11242532.html

codeforces708C相关推荐

最新文章

  1. mysql 概念和逻辑架构
  2. 雅虎正开发聊天机器人挑战对手 不过似乎很难成功
  3. Android之简单的文件夹选择器实现
  4. Spark修炼之道(进阶篇)——Spark入门到精通:第八节 Spark SQL与DataFrame(一)
  5. case when then的用法-leetcode交换工资
  6. WCF 服务中元数据的地址问题
  7. 雷达信号处理基础 ch1 note1
  8. ps安装失败的快速解决方法
  9. 如何选小盘绩优股,分析小盘股的优势和劣势
  10. ChaosBlade:混沌工程简介(一)
  11. 看懂UML类图和时序图
  12. 微信支付一直抱签名错误,但是校验通过。
  13. 京东要开实体店?且看他在线下如何被苏宁碾压
  14. 码农故事2——岁前落脚得安定 年后求职寻转机
  15. 入门JAVA第五天 方法与数组
  16. 说一说ADI公司的DSP发展历程
  17. geoserver osm 导入_[原]导入OpenStreetMap海图数据,并在GeoServer上发布
  18. HDU-2224-The shortest path
  19. MFS分布式文件系统的部署
  20. Windows Terminal添加、使用主题

热门文章

  1. iOS:自定义模态动画 --UIPresentationController
  2. 自己搭建自动化巡检系统(五) 抖动告警
  3. [Linux] Linux Shell查找文件
  4. UIScrollView无法滚动可能的原因及解决办法分析
  5. 在spring web中启动mqtt
  6. 快要普通话考试了,急需最后一题的根据话题自由讲话的演讲稿!(不要那些已经被用过...
  7. 我的2009:心智成长篇
  8. Django框架视图类
  9. PHP7 - MongoDB Driver 使用心得
  10. 关于范式的一些简单理解