『CF685X』

CF685A Robbers’ watch

首先明确值域:时和分上上限为 n − 1 , m − 1 n-1,m-1 n1,m1.
然后我们求出 n − 1 , m − 1 n-1,m-1 n1,m1 7 7 7进制下的位数,若位数之和大于 7 7 7则直接输出 0 0 0,否则由于值域很小所以暴力状压。


const ll N=1e5+5;

inline ll calc(ll x){
	if (x==0) return 1;
	ll res=0;
	while (x){
		++res;
		x/=7;
	}
	return res;
}

ll n, m;
ll a, b;

ll bin[20];

inline ll get_st(ll x, ll y){
	ll s=0;
	for (R ll i=1; i<=y; i++, x/=7){
		if (s&bin[x%7]) return -1;
		s|=bin[x%7];
	}
	return s;
}

ll res;
int main(){
	read(n); read(m);
	--n; --m;
	a=calc(n); b=calc(m);
	for (R ll i=0; i<10; i++) bin[i]=(1<<i);
	if (a+b>7) return puts("0"), 0;
	for (R ll i=0; i<=n; i++)
		for (R ll j=0; j<=m; j++){
			ll s1=get_st(i, a), s2=get_st(j, b);
			if (s1!=-1 && s2!=-1 && ((s1&s2)==0)) ++res;
		}
	writeln(res);
}

CF685B Kay and Snowflake

这里树的重心定义稍有不同,指的是删掉这个点余下联通块大小不大于原联通块一半的点.

所以有这么一个性质:一个点的重心一定在其子树重心到它本身的路径上,暴力跳就可以了,反正是 O ( n ) \mathcal{O}(n) O(n)

const ll N=3e5+5;
ll head[N], to[N<<1], next[N<<1], tot;
inline void add(ll x, ll y){
	to[++tot]=y; next[tot]=head[x]; head[x]=tot;
}
inline void Link(ll x, ll y){
	add(x, y); add(y, x);
}

ll n, m;

ll g[N];
ll siz[N], mx[N];
ll fa[N];

inline void dfs(ll x){
	siz[x]=1;
	for (R ll i=head[x], ver; i; i=next[i]){
		ver=to[i];
		dfs(ver);
		siz[x]+=siz[ver];
		chkmax(mx[x], siz[ver]);
	}
}

inline void dfs1(ll x){
	bool flag=false;
	for (R ll i=head[x], ver; i; i=next[i]){
		flag=true;
		ver=to[i];
		dfs1(ver);
		ll tmp=g[ver];
		while (1){
			if (max(mx[tmp], siz[x]-siz[tmp])<=siz[x]/2){
				g[x]=tmp;
				break;
			}
			if (tmp==x) break;
			tmp=fa[tmp];
		}
	}
	if (!flag) g[x]=x;
}
int main(){
	read(n); read(m);
	for (R ll i=2; i<=n; i++){
		read(fa[i]); add(fa[i], i);
	}
	dfs(1); 
	dfs1(1);
	ll x;
	while (m--){
		read(x);
		writeln(g[x]);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值