把這棵樹砍去任意條邊,拆成若干棵新樹,讓每棵新樹的節點數相同。
有多少種方法分割這棵樹。
首先可以變成有根樹,列舉每棵樹的節點數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想讓每棵新樹的節點數相同。他想知道有多少種方法分割這...