【HDOJ 5379】 Mahjong tree

往一颗树上标号 要求同一父亲节点的节点们标号连续 同一子树的节点们标号连续 问一共同拥有几种标法

画了一画 发现标号有二叉树的感觉

初始标号1~n 根结点1能够标1或n 否则其它情况无法让以下的子树满足各自连续而且该根的儿子节点都要连续

根结点下的节点平分其它标号 画一画能够发现 每一个根下最多有两颗子树 否则无法满足条件 而且两颗子树占领剩余标号的左右两边 中间夹的必须是叶子 这样才干满足该根下的儿子节点标号连续

若根下仅仅有一颗子树 相同能够选择占剩余标号左部分/右部分

剩余叶子全排列乘上就可以 每一个根都这样遍历一遍 假设期间出现一个根下有两颗以上的子树 就没法标号 即方案数为0 否则遍历完输出方案数就可以

代码例如以下:

#include <iostream>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <vector>
#define ll long long
#define MOD 1000000007 using namespace std; ll a[100010]={1,1,2};//A(n,n)排列组合
int n;
vector<int> s[100010];
bool vis[100010]; ll bfs()
{
memset(vis,0,sizeof(vis));
queue <int> q;
q.push(1);
vis[1] = 1;
ll ans = 2;
int i,u,v,yz,gen,sz;
while(!q.empty())
{
u = q.front();
q.pop();
yz = gen = 0;
sz = s[u].size();
for(i = 0; i < sz; ++i)
{
v = s[u][i];
if(vis[v]) continue;
if(s[v].size() == 1)//当前节点为叶子节点(仅仅有v-u一条边)
{
yz++;
}
else//为根结点
{
gen++;
q.push(v);
}
vis[v] = 1;
}
if(gen > 2) return 0;//根结点超2 无解
else if(gen)
{
ans = ((ans*2)%MOD*a[yz])%MOD;
}
else ans = (ans*a[yz])%MOD;
}
return ans;
} int main()
{
for(int i=3;i<=100001;i++)
a[i]=(a[i-1]*i)%MOD;
int t,k=0;
scanf("%d",&t);
while(k++,t--)
{
scanf("%d",&n);
memset(s,0,sizeof(s));
int u,v;
for(int i=1;i<n;i++)//双向建树
{
scanf("%d %d",&u,&v);
s[u].push_back(v);
s[v].push_back(u);
}
if(n == 1) printf("Case #%d: 1\n",k);//特判仅仅有树根的情况
else printf("Case #%d: %I64d\n",k,bfs());
} return 0;
}

【HDOJ 5379】 Mahjong tree的更多相关文章

  1. 【HDOJ 2089】不要62

    [HDOJ 2089]不要62 第一个数位dp的题 做的老困难了...只是好歹是做出来了 迈出了第一步.. 对大牛来说这样的题都是小case ps:新上一个记忆化方法 一些绕弯的题里用dfs好想些 代 ...

  2. 【HDOJ 5371】 Hotaru&#39;s problem

    [HDOJ 5371] Hotaru's problem Manacher算法+穷举/set Manacher算法一好文:http://blog.csdn.net/yzl_rex/article/de ...

  3. 【HDOJ 5654】 xiaoxin and his watermelon candy(离线+树状数组)

    pid=5654">[HDOJ 5654] xiaoxin and his watermelon candy(离线+树状数组) xiaoxin and his watermelon c ...

  4. 【HDOJ 5399】Too Simple

    pid=5399">[HDOJ 5399]Too Simple 函数映射问题 给出m函数 里面有0~m个函数未知(-1) 问要求最后1~n分别相应仍映射1~n 有几种函数写法(已给定的 ...

  5. 【HDOJ 3652】B-number

    [HDOJ 3652]B-number 给一整数n 找<=n的整数中能被13整除且含有13的 数位dp 记忆化! . 一入记忆化深似海. ..再也不想用递推了...发现真的非常好想 仅仅要保证满 ...

  6. 【HDOJ 5419】 Victor and Toys (排列组合)

    [HDOJ 5419] Victor and Toys n个玩具 m个区间 每一个玩具有一个beauty值 问任选三个区间 三区间的MINleft~MAXright的和的期望值 预处理一个数组 存放每 ...

  7. 【HDOJ 2255】奔小康赚大钱(KM算法)

    [HDOJ 2255]奔小康赚大钱(KM算法) 奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  8. 【POJ 2486】 Apple Tree(树型dp)

    [POJ 2486] Apple Tree(树型dp) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8981   Acce ...

  9. 【HDOJ 1009】 CRB and String

    [HDOJ 1009] CRB and String 每组两个串s t 仅仅由小写字母组成 问从s能不能变成t 改变的操作为选一个字符 在后面加上一个与所选字符不同的字符 这样的操作能够做无数次 问能 ...

随机推荐

  1. [转]Spring MVC 事务配置

    Spring MVC事务配置 要了解事务配置的所有方法,请看一下<Spring事务配置的5种方法> 本文介绍两种配置方法:  <tx:advice/>就是告诉事务管理器:怎么做 ...

  2. 使用tcp.validnode_checking允许、限制机器访问数据库

         使用tcp.validnode_checking允许.限制机器访问数据库 在$OREACLE_HOME/network/admin下直接修改sqlnet.ora文件,增加如下内容: tcp. ...

  3. Linux上安装使用SSH(ubuntu&&redhat)

    转自:http://blog.csdn.net/zxs9999/article/details/6930736 Ubuntu安装使用SSH ubuntu默认并没有安装ssh服务,如果通过ssh链接ub ...

  4. fmri 实验设计 / 范式设计/ paradigm design

    reference:http://www.psychology.gatech.edu/cabi/Resources/Course/index.html sluggish 懒散的,无精打采的.哈哈,pp ...

  5. linux自定义开机启动服务和chkconfig使用方法

    linux自定义开机启动服务和chkconfig使用方法 1. 服务概述在linux操作系统下,经常需要创建一些服务,这些服务被做成shell脚本,这些服务需要在系统启动的时候自动启动,关闭的时候自动 ...

  6. tensorflow c++接口的编译安装与一些问题记录

    参考这篇文章安装,依次安装bazel,protocbuf,eigen3,然后下载tensorflow源码,编译c++ api,将编译结果拷贝到搜索路径 最后测试案例时遇到一些问题 (1)fatal e ...

  7. UVa 164 - String Computer

    题目:编辑距离.给你两个串,将已知串转化成目标串,能够增.删.改字母,求最小操作次数. 分析:dp,编辑距离.同最大公共子序列. 注意操作位置是实时变化的. (前面都已经处理好了)           ...

  8. 几个免费的DNS地址

    百度CDN 180.76.76.76 114.114.114.114 阿里CDN 223.5.5.5 223.6.6.6 googleCDN 8.8.8.8 国内外DNSserver地址列表 http ...

  9. 关于RTP中的时间戳问题

    关于RTP中的时间戳问题 时间戳单位:时间戳计算的单位不为秒之类的单位,而是由采样频率所代替的单位,这样做的目的就是为了是时间戳单位更为精准.比如说一个音频的采样频率为8000HZ,那么我们可以把时间 ...

  10. bitbucket git push 项目503失败

    忙活了一天,要把项目push到远程仓库保存: 一直稳定的bitbucket今天突然push不成功了,出了503错误 谷歌了各种原因,还以为是连接出了问题 打开bitbucket State 页面之后, ...