博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1005 明明的烦恼(Prufer数列)
阅读量:6151 次
发布时间:2019-06-21

本文共 2004 字,大约阅读时间需要 6 分钟。

题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1005

题意:给出一棵树的某些节点的度数d,有些未给。问满足这个条件的树有多少种?

思路:

对于此题,设给定的度数的点有w个,令:$sum=\sum_{i=1}^{w}(d[i]-1)$

那么在最后的n-2个Prufer数列中这sum个是已经确定的,这sum个位置是给出的w个数的排列,排列数量为:$cnt=C_{n-2}^{sum}\frac{sum!}{\prod_{i=1}^{w}(d[i]-1)!}$

那么剩下的n-2-sum个位置上要放剩下的n-w个点,每个位置都有n-w种,所以最后的答案为:$cnt=C_{n-2}^{sum}\frac{sum!}{\prod_{i=1}^{w}(d[i]-1)!}(n-w)^{n-2-sum}$

import java.util.*;import java.text.*;import java.math.*;public class Main{     public static void PR(String s){        System.out.println(s);    }        public static void PR(int x)    {        System.out.println(x);    }          public static void PR(BigInteger x)    {        System.out.println(x);    }        public static void PR(double s)    {        java.text.DecimalFormat d=new java.text.DecimalFormat("#.000000");        System.out.println(d.format(s));    }            static BigInteger p[]=new BigInteger[1005];    static BigInteger ans;    static int d[]=new int[1005];    static int n;        public static void main(String[] args){                Scanner S=new Scanner(System.in);        n=S.nextInt();        int i;        p[0]=BigInteger.ONE;        for(i=1;i<=n;i++) p[i]=p[i-1].multiply(BigInteger.valueOf(i));                int sum=0,w=0,flag=1;        for(i=1;i<=n;i++)         {            d[i]=S.nextInt();            if(d[i]!=-1)             {                sum+=d[i]-1;                w++;            }            if(d[i]==0||d[i]>n-1) flag=0;        }        if(n==1)        {            if(d[1]==0||d[1]==-1) PR(1);            else PR(0);        }        else if(n==2)        {            if((d[1]==-1||d[1]==1)&&(d[2]==-1||d[2]==1)) PR(1);            else PR(0);        }        else if(flag==0) PR(0);        else        {            ans=p[n-2].divide(p[n-2-sum]);            for(i=1;i<=n;i++) if(d[i]!=-1)            {                ans=ans.divide(p[d[i]-1]);            }            for(i=1;i<=n-2-sum;i++) ans=ans.multiply(BigInteger.valueOf(n-w));            PR(ans);        }    }}

 

 

转载地址:http://niwfa.baihongyu.com/

你可能感兴趣的文章
Node.js 读取博客首页并获得文章标题
查看>>
四道微软面试经典算法题
查看>>
NYOJ-138 找球号(二)
查看>>
sql 语言
查看>>
CATransaction(参考其他博客敲)
查看>>
【Oracle】并行查询之DFO
查看>>
胖子哥的大数据之路(16):数据采集标准-我们到底需要什么样的数据?
查看>>
JS魔法堂:初探传说中的setImmediate函数
查看>>
ArcGIS 服务对象扩展(SOE)新手自学笔记(1):初识SOE
查看>>
XML注释快捷键
查看>>
[C++] 用Xcode来写C++程序[2] 操作变量
查看>>
[Java]套接字地址InetAddress讲解
查看>>
[LeetCode]65.Valid Number
查看>>
事务隔离级别小记
查看>>
细谈Ehcache页面缓存的使用
查看>>
String.format详解
查看>>
第1章 maven概览及快速入门
查看>>
五大理由分配你的告警
查看>>
如何创建电报机器人
查看>>
React系列-Redux中间件
查看>>