【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

prufer数列的应用
http://www.cnblogs.com/AWCXV/p/7626625.html
这一题没有节点的度数不定。
因此。
所有节点的度数-1的和结果一定要是n-2.
否则就无解。

然后把tot代成n-2就好了。

做法就一样了。

(大体思路就是,从n-2个空格里面选出d[i]个空格放节点i,从n-2-d[i]个空格里面选出d[i+1]个空格放节点i+1

(化简一下就成为上文中的式子了。

(d[i]0的时候在n1的时候是有解的

(可以不用高精度了这题

(结论,n!质因数分解后每个质因数p的指数为∑n/i 其中i为i,i2,i3...i^x 其中i^x<=n

【代码】

#include <bits/stdc++.h>
using namespace std; const int N = 150; int n,d[N+10],cnt[N+10];
bool is[N+10]; bool ok(int n){
int len = sqrt(n);
for (int i = 2;i <= len;i++)
if (n%i==0)
return false;
return true;
} void go(int n,int delta){
for (int i = 1;i <= n;i++){
if (is[i]){
int sum = 0;
for (int j = i;j <= n;j*=i) sum+=n/j;
cnt[i]+=sum*delta;
}
}
} int main(){
scanf("%d",&n);
int tot = 0;
for (int i = 1;i <= n;i++){
scanf("%d",&d[i]);
if (d[i]==0 && n!=1) return puts("0"),0;
d[i]--;
tot+=d[i];
} if (tot!=n-2) return puts("0"),0; for (int i = 2;i <= n;i++)
if (ok(i)) is[i] = true; go(n-2,1);
for (int i = 1;i <= n;i++) go(d[i],-1);
long long temp = 1;
for (int i = 1;i <= n;i++)
for (int j = 1;j <= cnt[i];j++)
temp = temp*i;
printf("%lld\n",temp);
return 0;
}

最新文章

  1. 用CIL写程序:定义一个叫“慕容小匹夫”的类
  2. Linux系统开机默认开启无线网卡
  3. 4.Powershell交互界面
  4. css+js定位到屏幕中间
  5. HRV基础
  6. 跟着百度学PHP[1]-if条件嵌套
  7. mac安装nginx
  8. JavaScript:实现瀑布流
  9. ch2-3:模块的使用-window环境
  10. Jquery 移除 html中绑定的onClick事件
  11. Loadrunner 添加windows资源没反应
  12. Python一些难以察觉的错误
  13. 为Debug和Release分别设置Web.config
  14. 【prism】前期准备
  15. IIS7.0出错的解决方案 IIS 状态代码:IIS详细错误代码以及解释
  16. HDU -2670 Girl Love Value
  17. Python_从字符串中提取号码
  18. 深入理解Java NIO
  19. windows 下 bat 计划任务删除保留时间内文件
  20. 缺少 mysqli 扩展。请检查 PHP 配置。

热门文章

  1. 实战:一、使用mongo做一个注册的小demo
  2. C++ auto类型说明符
  3. Elasticsearch Sliced Scroll分页检索案例分享
  4. 洛谷 P1124 文件压缩
  5. [SharePoint][SharePoint Designer 入门经典]Chapter11 工作流基础
  6. 【零基础入门学习Python笔记013】元祖:戴上了枷锁的列表
  7. Deming管理系列(1)——开车仅仅看后视镜
  8. spring batch(二):核心部分(1):配置Spring batch
  9. 常用的Linux 命令
  10. 院校-美国:美国国立卫生研究院(NIH)