jzoj4757 樹上摩托

2021-07-22 10:46:19 字數 940 閱讀 7055

把這棵樹砍去任意條邊,拆成若干棵新樹,讓每棵新樹的節點數相同。

有多少種方法分割這棵樹。

首先可以變成有根樹,列舉每棵樹的節點數k,則size為k的倍數的個數有等於n/k。我們可以開乙個桶存size,列舉size統計個數判斷即可。

#include

#include

#include

#include

#include

#define lf double

#define ll long long

#define max(a,b) ((a>b)?a:b)

#define min(a,b) ((a>b)?b:a)

#define fo(i,j,k) for(int i=j;i<=k;i++)

#define fd(i,j,k) for(int i=j;i>=k;i--)

using namespace std;

int const maxn=1000000,maxm=100,inf=2147483647;

int n,m,gra,size[maxn+10],du[maxn+10],q[maxn+10],begin[maxn+10],to[maxn*2+10],next[maxn*2+10];

bool visit[maxn+10];

intread()

void insert(int u,int v)

void dfs(int now)

}fd(j,r,1)

}int main()

fo(i,1,n)

if(du[i]==1)

int ans=0,sqrtn=sqrt(n),cnt,ii;

fo(i,1,sqrtn)

if(n%i==0)

printf("%d",ans);

return

0;}

Jzoj4757 樹上摩托

sherco是一位經驗豐富的魔 法師。sherco在第零次聖杯戰爭中取得了勝利,並取得了王之寶藏 王 樹。他想把這棵樹砍去任意條邊,拆成若干棵新樹,並裝飾在他的摩托上,讓他的摩托更加酷炫。但sherco認為,這樣生成的樹不具有美感,於是sherco想讓每棵新樹的節點數相同。他想知道有多少種方法分割這...

JZOJ5055 樹上路徑

給定一棵 n 個節點的無根樹,每個點都有乙個非負整數的權值va li,定義一條路徑的價值為路徑上的點權和減去路徑的點權最大值。給定引數 p 請求出樹上有多少條價值是 p的倍數的路徑。注意 單點也算路徑。並且路徑 u v 和 v u 只算一次。1 n 105 1 p 107,0 va li 10 9 ...

樹上摩托 NOIP2016提高A組模擬9 4

sherco是一位經驗豐富的魔 法師。sherco在第零次聖杯戰爭中取得了勝利,並取得了王之寶藏 王 樹。他想把這棵樹砍去任意條邊,拆成若干棵新樹,並裝飾在他的摩托上,讓他的摩托更加酷炫。但sherco認為,這樣生成的樹不具有美感,於是sherco想讓每棵新樹的節點數相同。他想知道有多少種方法分割這...