Description
实验室有n瓶化学药品,编号为0到n-1,你知道第i瓶只有和第c[i]瓶放在一起才会发生爆炸。为了整理实验室,你需要将他们装进k个丌同的盒子里。显然,为了你的生命安全,你丌能把两瓶会造成爆炸的药品放进同一个箱子。你希望计算出有多少中丌同的方案。为了降低难度,你只需要将答案mod 1000000007。

Input
第一行一个整数T,表示有T组测试数据。

对于每组数据

第一行两个整数n,k

第二行n个整数表示c[i]

Output
对于每组数据输出一行一个整数。

Sample Input
3

3 3

1 2 0

4 3

1 2 0 0

3 2

1 2 0

Sample Output
6

12

0

Data Constraint
1<=T<=50 1<=n<=100 2<=k<=1000 0 < Ci < n ,i≠c[i]

对于30%的数据T,n,k<=50
.
.
.
.

分析

mix:
把不能放一起的药连一条边。
最后会得到若干环套树(一个环,每个节点可以是一棵树),也可能退化成一棵树,我们可以理解成环上只有一个节点的环套树。
现在要将其k染色,使得有边相连的节点颜色不同。
我们可以DP求得一个环的方案数,那么对于环上连出的一棵树,它的方案数显然是(k-1)^Size(这里的Size是不算在环上的那个节点的这课树的节点数)。
最后只要把环的方案数*所有树的方案数的乘积就是最终答案。
.
.
.
.
.

程序:
#include<iostream>
#include<string.h>
using namespace std;
long long ans,a[101],d[101],f[101][3];
int n,k,t,inf=1000000000,mo=1000000007;
int main()
{cin>>t;for (int i=1;i<=t;i++){memset(a,0,sizeof(a)); memset(d,0,sizeof(d));memset(f,0,sizeof(f));cin>>n>>k;for (int i=0;i<=n-1;i++) {cin>>a[i];d[i]=inf;}f[0][1]=1; f[1][0]=k-1;for (int i=2;i<=n;i++){f[i][0]=(f[i-1][1]*(k-1)+f[i-1][0]*(k-2))%mo;f[i][1]=f[i-1][0];}ans=1;for (int i=0;i<=n-1;i++)if (d[i]==inf){int x=i;while (d[x]==inf) {d[x]=i;x=a[x];}if (d[x]!=i) continue;int y=x;long long tot=1; x=a[x];while (x!=y) {tot++;x=a[x];}ans=ans*(f[tot][1]*k%mo)%mo;n-=tot;}for (int i=1;i<=n;i++) ans=(ans*(k-1))%mo;cout<<ans<<endl;}
}

转载于:https://www.cnblogs.com/YYC-0304/p/9499918.html

【NOIP2013模拟9.29】Mixing Chemicals相关推荐

  1. 【NOIP2013模拟9.29】TheSwaps

    Description Alice得到了一个整数, 她将其视作长度为n的字符串S.为了好玩,她进行了k次如下操作: 1) 随机选取两个不同的位置x和y(即每次操作, { < x, y> | ...

  2. 【NOIP2013模拟9.29】密码

    Description 在又一次消灭林登·万的战斗中,指挥官moreD缴获了一个神奇的盒子.盒子异常的坚固,以至于完全无法摧毁,唯一打开的方式是通过盒上的密码锁. 经过仔细的调查,研究人员一致认为这个 ...

  3. 【JZOJ B组】【NOIP2013模拟9.29】密码

    Description 在又一次消灭林登·万的战斗中,指挥官moreD缴获了一个神奇的盒子.盒子异常的坚固,以至于完全无法摧毁,唯一打开的方式是通过盒上的密码锁. 经过仔细的调查,研究人员一致认为这个 ...

  4. JZOJ 3461. 【NOIP2013模拟联考5】小麦亩产一千八(kela)

    3461. [NOIP2013模拟联考5]小麦亩产一千八(kela) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Det ...

  5. JZOJ 3388. 【NOIP2013模拟】绿豆蛙的归宿

    3388. [NOIP2013模拟]绿豆蛙的归宿 (Standard IO) Time Limits: 1000 ms  Memory Limits: 131072 KB  Detailed Limi ...

  6. JZOJ 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)

    3518. [NOIP2013模拟11.6A组]进化序列(evolve) (File IO): input:evolve.in output:evolve.out Time Limits: 1000 ...

  7. 【NOIP2013模拟】Freda的传呼机

    [NOIP2013模拟]Freda的传呼机 Time Limits: 100 ms Memory Limits: 131072 KB Description 为了 随时 与 rainbow快速交流, ...

  8. jzoj 3461. 【NOIP2013模拟联考5】小麦亩产一千八(math)

    3461. [NOIP2013模拟联考5]小麦亩产一千八 Description "有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾--",话说HYSBZ(Hen ...

  9. 【NOIP2013模拟】四叶草魔杖

    [NOIP2013模拟]四叶草魔杖 Time Limits: 1000 ms Memory Limits: 131072 KB Description 魔杖护法Freda融合了四件武器,于是魔杖顶端缓 ...

最新文章

  1. shell 边边角角
  2. PHPExcel报错:谷歌浏览器显示网页可能暂时无法连接,或者它已永久性地移动到了新网址的原因?
  3. 追踪源码自定义负载均衡策略
  4. 配置Ubuntu Server高速apt-get源
  5. 人工智能AI实战100讲(十)-一文读懂推荐系统负采样
  6. 【转】探索c#之Async、Await剖析
  7. DirectX - dds图片格式(DDSURFACEDESC2)
  8. 2018中国十大科技进展公布!两院院士投票,港珠澳大桥和天河三号上榜
  9. error: dst ref refs/heads/zhCN_v0.13.1 receives from more than one src.
  10. 三通短信每月发送量导入Sqlserver随笔
  11. Postfix配置QQ邮箱发邮件
  12. week2-二分和二分搜索
  13. 前端vue接口渲染到模板报错解决方案
  14. 菜鸟的redis学习总结
  15. 安卓查看中文官网、API、安卓文档
  16. 邮箱 名字 地址url正则表达式
  17. 美团酒旅数据治理实践案例分享
  18. APS实现的要点与难点
  19. 【5G】5G关键技术领域发展状况
  20. java魔方大作业_JAVA实现的魔方

热门文章

  1. 科大星云诗社动态20210529
  2. [创业基础笔记] 第1讲-认识创业与创业者
  3. 《C++ Primer中文版(第5版)》学习笔记与习题完整发布!
  4. Coursera吴恩达《序列模型》课程笔记(1)-- 循环神经网络(RNN)
  5. VTK修炼之道82:VTK管线机制_信息对象类VTKInformation
  6. PowerDesigner16导出Sql修复
  7. linux-IO之copy的实现
  8. LGB 的 .feature_importance() 函数
  9. JAVA JDBC详解
  10. UNIX再学习 -- 进程间通信之管道