bzoj 1211
2015-09-12 17:55
183 查看
prufer序列:
参考链接:http://hzwer.com/3272.html
证明:一个序列必定对应着一棵合法的树
假设共有n个点,编号从1到n:
首先,n个点之间连了n-1条边;
其次,证,n个点之间不会出现环:假设环中最后添加进来的一条边是a,b,与a相连的另一个点是c,与b相连的另一个点是d,假设a是从x中选出来的,b是从y中选出来的,可知,a,c这条边中的a只能是从y中选出来的,b,c这条边中的b只能是从y中选出来的,所以c,d必定是从x中选来的,这个环继续延伸,必定会出现一条边两个点都要从y中选出来,这是不可能的,所以一定不会出现环。
综上所述,由特定数组成的序列和合法的树一一对应。
所以这道题最后演化成求一串数的排序方式。
用java交题,不用加包(否则会re),并且类名是Main.(经过后续验证,不加包反而会ce,加了包才能ac,前一段时间得到的结果怎么和现在的差距这么大呢?
)
代码参考:http://www.cnblogs.com/zhj5chengfeng/p/3278557.html
(周日打完比赛,自己一个人去吃了一小份鸡公煲,感觉学校里的鸡公煲,嗯,是肉,就没有更深一层的味道了
,还是酸梅汤比较好喝,但是卫生?亲眼目睹的一幕,还是有点无法接受
)
2015.10.30:
话说csdn还是挺好看的,除了速度慢点,除了不知道存不存在的可以备份到自己电脑上的功能,除了想按立即保存,不小心按成了舍弃,除了……,其实csdn还是挺好的。
参考链接:http://hzwer.com/3272.html
证明:一个序列必定对应着一棵合法的树
假设共有n个点,编号从1到n:
首先,n个点之间连了n-1条边;
其次,证,n个点之间不会出现环:假设环中最后添加进来的一条边是a,b,与a相连的另一个点是c,与b相连的另一个点是d,假设a是从x中选出来的,b是从y中选出来的,可知,a,c这条边中的a只能是从y中选出来的,b,c这条边中的b只能是从y中选出来的,所以c,d必定是从x中选来的,这个环继续延伸,必定会出现一条边两个点都要从y中选出来,这是不可能的,所以一定不会出现环。
综上所述,由特定数组成的序列和合法的树一一对应。
所以这道题最后演化成求一串数的排序方式。
用java交题,不用加包(否则会re),并且类名是Main.(经过后续验证,不加包反而会ce,加了包才能ac,前一段时间得到的结果怎么和现在的差距这么大呢?
)
代码参考:http://www.cnblogs.com/zhj5chengfeng/p/3278557.html
(周日打完比赛,自己一个人去吃了一小份鸡公煲,感觉学校里的鸡公煲,嗯,是肉,就没有更深一层的味道了
,还是酸梅汤比较好喝,但是卫生?亲眼目睹的一幕,还是有点无法接受
)
2015.10.30:
话说csdn还是挺好看的,除了速度慢点,除了不知道存不存在的可以备份到自己电脑上的功能,除了想按立即保存,不小心按成了舍弃,除了……,其实csdn还是挺好的。
import java.math.BigInteger; import java.util.*; public class Main { static Scanner in=new Scanner(System.in); static int N=160; static int[] num=new int ; static int n; static int a; static int sum; static boolean pd=true; static BigInteger ans=new BigInteger("1"); static BigInteger temp=new BigInteger("1"); static BigInteger now=new BigInteger("1"); static BigInteger addnum=new BigInteger("1"); static public void main(String args[]){ n=in.nextInt(); for(int i=0;i<=n;i++){ num[i]=0; } for(int i=1;i<=n;i++){ a=in.nextInt(); if(a<0||a>n-1){//判断该能不能构成树。 pd=false; } else{ if(a==0){//当一棵树只有一个点时,度数可以有0,但是如果大于一个点时就不能存在度数为0的点,所以这点要单独拿出来判断。 pd=false; } sum+=a; num[a]++; } } in.close(); if((n!=1&&pd==false)||sum!=(2*n-2)||(n==1&&num[0]==0)){ System.out.println("0"); } else if(n==1&&num[0]!=0){ System.out.println("1"); } else{ for(int i=1;i<=n-2;i++){ ans=ans.multiply(now); now=now.add(addnum); } now=now.subtract(now); now=now.add(addnum); for(int i=1;i<=n-1;i++){ temp=temp.multiply(now); now=now.add(addnum); for(int j=1;j<=num[i+1];j++){ ans=ans.divide(temp); } } System.out.println(ans); } } }
相关文章推荐
- VS2015编译VLC2.2.1(under WIN7-64)
- bzoj 1211
- rpm包管理和yum命令的介绍
- php之无限极分类
- JavaScript : the good parts(语言精髓读书笔记)
- lintcode-不同的路径II-115
- js实现找零张数最小问题
- 问题集结(三)
- Centos7 安装kilo-7 Controller(neutron)
- 乌克兰的遭遇
- JSP页面细节
- Android Studio 项目中集成百度地图SDK报Native method not found: com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create:()I错误
- 查找包含某字段名的表名
- [LeetCode] Maximum Product Subarray
- 015.8.4 第九堂 扩展-单例模式
- 解析C++中的字符串处理函数和指针
- 开始写博客的原因
- Java反射机制详解
- UML之部署图(Deployment Diagram)
- [转载] 首席工程师揭秘:LinkedIn大数据后台是如何运作的?(一)