zoukankan      html  css  js  c++  java
  • bzoj1430

    这道题只是给bzoj1005做一个铺垫
    这里介绍了一个叫prufer编码的东西,就是
    给定一棵带标号的无根树,找出编号最小的叶子节点,写下与它相邻的节点的编号,
    然后删掉这个叶子节点。反复执行这个操作直到只剩两个节点为止。
    这个编码有几个重要的性质
    1. 每棵树都唯一对应一个prufer编码
    2. 每一个prufer编码都唯一对应一棵树
    3. 树上每个点的度数-1=这个点在数列出现的次数
    所以用这个解决完全图生成树个数就很显然了,答案是n^(n-2)

     1 const mo=9999991;
     2 var c:array[0..100] of longint;
     3     i,j,p,b:longint;
     4     ans,n:int64;
     5 
     6 begin
     7   readln(n);
     8   j:=0;
     9   b:=n-2;
    10   while b<>0 do
    11   begin
    12     inc(j);
    13     c[j]:=b mod 2;
    14     b:=b div 2;
    15   end;
    16   ans:=1;
    17   for i:=j downto 1 do
    18   begin
    19     ans:=sqr(ans) mod mo;
    20     if c[i]=1 then ans:=ans*int64(n) mod mo;
    21   end;
    22   for i:=1 to n-1 do
    23     ans:=ans*int64(i) mod mo;
    24   writeln(ans);
    25 end.
    26 
    27  
    View Code
  • 相关阅读:
    PAT:1002. 写出这个数 (20) AC
    PAT:1031. 查验身份证(15) AC
    PAT:1021. 个位数统计 (15) AC
    NSDate
    iOS程序的生命的周期
    Swift swith语句
    Swift 循环语句
    Swift 基本运算符
    Swift 解包
    Swift 可选类型(补充)
  • 原文地址:https://www.cnblogs.com/phile/p/4473067.html
Copyright © 2011-2022 走看看