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
  • 相关阅读:
    51nod 1051【基础】
    HDU5971【瞎搞】
    Lightoj1018 【状压DP】
    HDU2604【矩阵快速幂】
    HDU1501【简单DP】
    HDU3555【数位DP】
    Lightoj1037【状压DP】
    51nod 1099【贪心】
    HDU5950【矩阵快速幂】
    51nod 1049【经典】
  • 原文地址:https://www.cnblogs.com/phile/p/4473067.html
Copyright © 2011-2022 走看看