首页 > 其他分享 >luogu P4183 [USACO18JAN]Cow at Large P

luogu P4183 [USACO18JAN]Cow at Large P

时间:2022-10-04 16:11:48浏览次数:73  
标签:const int luogu db long Large using P4183 define

题面传送门

奇妙的题目。

首先我们可以得出当\(u\)点为根的时候\(i\)点是否可以被控制:设\(g_i\)表示\(i\)号点到最近的叶子距离,则当$g_i\geq dist(u,i) \(时\)u\(子树内的点可以在牛到这个点之前爬到这个点。如果这个点最终停了一个点,则这个点还需要满足\)g_{fa_i}<dist(u,fa_i)\(。因此我们得到一个\)O(n^2)$的方法。

这个限制不是很好做,容易发现如果一个点1满足限制则整个子树的点都满足限制,又有\(\sum\limits_{i\in subtree_i}{deg_i}=2|subtree_i|-1\),有\(1=\sum\limits_{i\in subtree_i}{2-deg_i}\)。故可以转化成点对贡献,直接点分治即可。

code:

#include<bits/stdc++.h>
#define Gc() getchar() 
#define Me(x,y) memset(x,y,sizeof(x))
#define Mc(x,y) memcpy(x,y,sizeof(x))
#define d(x,y) ((m)*(x-1)+(y))
#define R(n) (rnd()%(n)+1)
#define Pc(x) putchar(x)
#define LB lower_bound
#define UB upper_bound
#define PB push_back
using ll=long long;using db=double;using lb=long db;using ui=unsigned;using ull=unsigned ll;
using namespace std;const int N=7e4+5,M=pow(6,10)+5,K=2e3+5,mod=998244353,Mod=mod-1;const db eps=1e-5;const int INF=1e9+7;
int n,m,k,x,y,z,In[N],g[N],Ans[N];vector<int> S[N];
void BFS(){
	int i;queue<int> Q;while(!Q.empty()) Q.pop();Me(g,-1);for(i=1;i<=n;i++) if(In[i]==1) Q.push(i),g[i]=0;
	while(!Q.empty()) {int x=Q.front();Q.pop();for(int i:S[x]) g[i]==-1&&(Q.push(i),g[i]=g[x]+1);}
}
namespace Tree{int f[N*2];void Ins(int x,int y){while(x<=2*n) f[x]+=y,x+=x&-x;}int Qry(int x){int Ans=0;while(x) Ans+=f[x],x-=x&-x;return Ans;}}
namespace PC{
	int dp[N],Si[N],Ct,vis[N],Rt,d[N];
	void GI(int x,int La){Ct++;for(int i:S[x]) i^La&&!vis[i]&&(GI(i,x),0);}
	void DP(int x,int La){Si[x]=1;dp[x]=0;for(int i:S[x]) i^La&&!vis[i]&&(DP(i,x),Si[x]+=Si[i],dp[x]=max(dp[x],Si[i]));dp[x]=max(dp[x],Ct-Si[x]);dp[x]<dp[Rt]&&(Rt=x);}
	void Make(int x,int La){d[x]=d[La]+1;for(int i:S[x]) i^La&&!vis[i]&&(Make(i,x),0);}
	void Ins(int x,int La,int op){Tree::Ins(g[x]-d[x]+n,op*(2-In[x]));for(int i:S[x]) i^La&&!vis[i]&&(Ins(i,x,op),0);}
	void Qry(int x,int La){Ans[x]+=Tree::Qry(d[x]+n);for(int i:S[x]) !vis[i]&&i^La&&(Qry(i,x),0);}
	void dfs(int x,int La){
		Ct=0;GI(x,La);Rt=0;DP(x,La);x=Rt;vis[x]=1;Tree::Ins(g[x]+n,2-In[x]);
		d[x]=0;for(int i:S[x]) !vis[i]&&(Make(i,x),Ins(i,x,1),0);
		for(int i:S[x]) !vis[i]&&(Ins(i,x,-1),Qry(i,x),Ins(i,x,1),0);Tree::Ins(g[x]+n,In[x]-2);Ans[x]+=Tree::Qry(n);
		for(int i:S[x]) !vis[i]&&(Ins(i,x,-1),0);
		for(int i:S[x]) !vis[i]&&(dfs(i,x),0);
	}
}
int main(){
	freopen("1.in","r",stdin);freopen("1.out","w",stdout);
	int i,j;scanf("%d",&n);for(i=1;i<n;i++) scanf("%d%d",&x,&y),In[x]++,In[y]++,S[x].PB(y),S[y].PB(x);BFS();
	PC::dp[0]=1e9;PC::dfs(1,0);for(i=1;i<=n;i++) printf("%d\n",Ans[i]); 
}

标签:const,int,luogu,db,long,Large,using,P4183,define
From: https://www.cnblogs.com/275307894a/p/16753907.html

相关文章

  • Luogu P5089 [eJOI2018] 元素周期表 题解
    (从洛谷博客搬过来的)这道题嘛..主要还是找性质推规律。拿到题,第一眼:噢噢爆搜啊。第二眼:噢噢贪心啊。第三眼:很好贪心假了。然后苦思冥想半个小时去看题解。看到兔队的......
  • Luogu P6937 [ICPC2017 WF]Secret Chamber at Mount Rushmore
    (从洛谷博客搬过来的)简要题意:告诉你可以从哪些字符转化为哪些字符,然后再问你某一个字符串能否转化为另一个字符串。这里提供两种做法:爆搜和传递闭包。算法一爆搜看到......
  • CSP模拟练习赛1 https://www.luogu.com.cn/contest/82861#problems
    P1321单词覆盖还原简单思路字符串#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<map>#definelllonglon......
  • Luogu P3469 [POI2008]BLO-Blockade(tarjan求割点)
    题目链接:https://www.luogu.com.cn/problem/P3469 [POI2008]BLO-Blockade题面翻译B城有$n$个城镇,$m$条双向道路。每条道路连结两个不同的城镇,没有重复的道路,所有......
  • LeetCode 363. Max Sum of Rectangle No Larger Than K
    原题链接在这里:https://leetcode.com/problems/max-sum-of-rectangle-no-larger-than-k/题目:Givenan mxn matrix matrix andaninteger k,return themaxsum......
  • luogu P7004 [NEERC2013]Interactive Interception 题解
    题目链接感觉比较玄学的交互,看了题解才会做。主体的思想是,我们在二分位置的同时也对\(v\)的范围进行修改。假设我们现在的区间是\([L,R]\),那么我们取\(mid=\frac{L......
  • Luogu P7503 「HMOI R1」文化课
    题传先想一个巨shaber的暴力DP:设\(f_{i}\)为对前\(i\)个人分段的最优解,则:\[f_{i}=\max_{0\lej<i}\{f_{j}+\operatorname{W}(j+1,i)\}\]其中:\[\operatorname{W......
  • Proj CMI Paper Reading: LAVA: Large-scale Automated Vulnerability Addition
    AbstractTask:generatinglargegroundtruthvulnerabilitycorpora方法:动态污点分析。合成bugs但这些bugs因为只能够被真实输入诱发且在程序逻辑深处因而较为真实和有......
  • The XOR Largest Pair(字典树)
    ​ 题目描述在给定的 N 个整数 A1,A2,…,AN 中选出两个进行异或运算,得到的结果最大是多少?输入格式第一行一个整数 N。第二行 N 个整数 Ai。输出格式一个整......
  • 【luogu P6779】rla1rmdq(分块)(树链剖分)
    rla1rmdq题目链接:luoguP6779题目大意给你一个n个点的有根树,根给出,和一个值域在1~n的数组。然后m次操作,每次对于一个数组的区间l~r,把它们的值都变成格子树上父......