(2019沈阳网络赛) D. Fish eating fruit (点分治)

传送门

解:就是求图中所有路径%3为0,1,2的路径和。

#include
#define il inline
#define pb push_back
#define ms(_data,v) memset(_data,v,sizeof(_data))
#define SZ(a) int((a).size())
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f;
const int maxn=1e4+5;
const int mod=1e9+7;
template  il void read(_Tp&x) {
	char ch;bool flag=0;x=0;
	while(ch=getchar(),!isdigit(ch)) if(ch=='-')flag=1;
	while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
	if(flag) x=-x;
}
il int Add(ll &x,ll y) {return x=x+y>=mod?x+y-mod:x+y;}
il int Mul(ll &x,ll y) {return x=x*y>=mod?x*y%mod:x*y;}
int n,k,sz[maxn],root,mx,all,cnt;
ll dis[maxn],q[maxn],ans0,ans1,ans2;
bool vis[maxn];
struct node{
	int to,w;
};
vector mp[maxn];
il void getroot(int x,int fa){ 
	sz[x]=1;
	int num=0;
	for(int i=0;i<(int)(mp[x].size());++i){
		int nto=mp[x][i].to;
		if(vis[nto] || fa==nto) continue;
		getroot(nto,x);
		sz[x]+=sz[nto];
		num=max(num,sz[nto]);
	}
	num=max(num,all-num);
	if(num

 

你可能感兴趣的:(点分治)