zoukankan      html  css  js  c++  java
  • [BZOJ1211]树的计数(前方大波吐槽,慎入)

    树的计数

    题目描述

    一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵。给定n,d1, d2, …, dn,编程需要输出满足d(vi)=di的树的个数。

    输入格式

    第一行是一个正整数n,表示树有n个结点。第二行有n个数,第i个数表示di,即树的第i个结点的度数。其中1<=n<=150,输入数据保证满足条件的树不超过10^17个。

    输出格式

    输出满足条件的树有多少棵。

    样例

    样例输入

    4 
    2 1 2 1
    

    样例输出

    2
    

    本来这题没什么可说的,就是个基础结论,然而,我目前非常的不爽,一道HNOI的题,全靠特判?变态不变态

    现在难受的一匹,一道分解质因数的板子题(?)让我打了一个小时,非常不爽,特判判出来50分?一个n=1,du[1]=0就让我从WA83蹦到AC,这题A的一点都不让人开心

    关于题,没啥想说的,Pufer结论,判一下能不能成树balabala一堆,打个分解质因数的模板,然后你就可以愉快的AC了

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<vector>
     4 #define ll long long
     5 #define maxn 160
     6 using namespace std;
     7 int n,cnt,pp;
     8 ll ans=1,sum;
     9 int du[maxn],visit[maxn],pd[maxn],zs[maxn],jl[maxn];
    10 vector <int> cs;
    11 void shai(int x)
    12 {
    13     for(int i=2;i<=x;++i)
    14     {
    15         if(visit[i]==0)  {visit[i]=i;  zs[++cnt]=i;}
    16         for(int j=1;j<=cnt;++j)
    17         {
    18             if(zs[j]>visit[i]||zs[j]*i>x)  break;
    19             visit[i*zs[j]]=zs[j];
    20         }
    21     }
    22 }
    23 int main()
    24 {
    25     scanf("%d",&n);  shai(n);
    26     for(int i=1;i<=n;++i)
    27     {
    28         scanf("%d",&du[i]);  sum+=1ll*du[i];
    29         if(du[i]==0)  pp=1;
    30     }
    31     if(n==1&&du[1]==0)  {printf("1
    ");  return 0;}
    32     if(sum!=n*2-2)  {printf("0
    ");  return 0;}
    33     if(pp==1)  {printf("0
    ");  return 0;}
    34     for(int i=2;i<=n-2;++i)
    35     {
    36         int ls=i;
    37         while(ls>1)
    38         {
    39             jl[visit[ls]]++;
    40             if(pd[visit[ls]]==0)  {pd[visit[ls]]=1;  cs.push_back(visit[ls]);}
    41             ls/=visit[ls];
    42         }
    43     }
    44     for(int i=1;i<=n;++i)
    45         for(int j=2;j<=du[i]-1;++j)
    46         {
    47             int ls=j;
    48             while(ls>1)
    49             {
    50                 jl[visit[ls]]--;
    51                 if(pd[visit[ls]]==0)  {pd[visit[ls]]=1;  cs.push_back(visit[ls]);}
    52                 ls/=visit[ls];
    53             }
    54         }
    55     for(int i=0;i<cs.size();++i)
    56         for(int j=1;j<=jl[cs[i]];++j)  {ll ch=1ll*cs[i];  ans=ans*ch;}
    57     printf("%lld
    ",ans);
    58     return 0;
    59 }
    让人难受的代码

     目前在写明明的烦恼,一个特判都不敢扔。。。

  • 相关阅读:
    Mybatis 接口绑定
    Spring AOP
    Spring 基础使用
    Java 类的生命周期
    Mybatis 测试延迟加载
    Mybatis
    eclipse 常用jar包总结
    Web 过滤器参数设置问题
    Web 单元测试
    zabbix监控-自定义监控与报警(二)
  • 原文地址:https://www.cnblogs.com/hzjuruo/p/11234315.html
Copyright © 2011-2022 走看看