Bzoj4894 天赋

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 16  Solved: 16

Description

小明有许多潜在的天赋,他希望学习这些天赋来变得更强。正如许多游戏中一样,小明也有n种潜在的天赋,但有

一些天赋必须是要有前置天赋才能够学习得到的。也就是说,有一些天赋必须是要在学习了另一个天赋的条件下才

能学习的。比如,要想学会"开炮",必须先学会"开枪"。一项天赋可能有多个前置天赋,但只需习得其中一个就可

以学习这一项天赋。上帝不想为难小明,于是小明天生就已经习得了1号天赋-----"打架"。于是小明想知道学习完

这n种天赋的方案数,答案对1,000,000,007取模。

Input

第一行一个整数n。

接下来是一个n*n的01矩阵,第i行第j列为1表示习得天赋j的一个前置天赋为i。

数据保证第一列和主对角线全为0。

n<=300

Output

第一行一个整数,问题所求的方案数。

Sample Input

8
01111111
00101001
01010111
01001111
01110101
01110011
01111100
01110110

Sample Output

72373

HINT

Source

By 佚名上传

图论 基尔霍夫矩阵 高斯消元

把“点了一个前置技能(或一个前置相同的同级技能),接着点当前技能”看成一条有向边,那么我们要求的就是这个有向图的树形图的数量。

(度娘告诉我)有向图也可以用矩阵树定理搞。

敲完以后跑样例,怎么调答案都是0

输出矩阵看了一下,发现最左边一列全是0,然后注意到树形图的根固定了是1,也许这导致矩阵实际上少了一个元?

暴力把矩阵往左上平移一单位,再求出行列式,发现就是答案。

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 #define LL long long
 7 using namespace std;
 8 const int mod=1e9+7;
 9 const int mxn=305;
10 int f[mxn][mxn];
11 int n;
12 char s[mxn];
13 int ksm(int a,int k){
14     int res=1;
15     while(k){
16         if(k&1)res=(LL)res*a%mod;
17         a=(LL)a*a%mod;
18         k>>=1;
19     }
20     return res;
21 }
22 int solve(int n){
23     int i,j,k,F=1;
24     for(i=1;i<=n;i++){
25         int p=i;
26         for(j=i;j<=n;j++)if(f[j][i]){p=i;break;}
27         if(p!=i){for(j=1;j<=n;j++)swap(f[p][j],f[i][j]); F=-F;}
28         for(j=i+1;j<=n;j++){
29             LL inv=(LL)f[j][i]*ksm(f[i][i],mod-2)%mod;
30             for(k=i;k<=n;k++){
31                 f[j][k]=((LL)f[j][k]-inv*(LL)f[i][k]%mod+mod)%mod;
32             }
33         }
34     }
35     int res=F;
36     for(i=1;i<=n;i++)res=(LL)res*f[i][i]%mod;
37     if(res<0)res+=mod;
38     return res;
39 }
40 int main(){
41     int i,j;
42     scanf("%d",&n);
43     for(i=1;i<=n;i++){
44         scanf("%s",s+1);
45         for(j=1;j<=n;j++){
46             if(s[j]==‘1‘){
47                 f[j][j]++;
48                 f[i][j]--;
49             }
50         }
51     }
52     for(i=1;i<=n;i++)
53         for(j=1;j<=n;j++)
54             f[i][j]=f[i+1][j+1];
55     LL ans=solve(n-1);
56     printf("%lld\n",ans);
57     return 0;
58 }
时间: 2024-10-25 03:14:28

Bzoj4894 天赋的相关文章

【BZOJ4894】天赋 有向图生成树计数

[BZOJ4894]天赋 Description 小明有许多潜在的天赋,他希望学习这些天赋来变得更强.正如许多游戏中一样,小明也有n种潜在的天赋,但有一些天赋必须是要有前置天赋才能够学习得到的.也就是说,有一些天赋必须是要在学习了另一个天赋的条件下才能学习的.比如,要想学会"开炮",必须先学会"开枪".一项天赋可能有多个前置天赋,但只需习得其中一个就可以学习这一项天赋.上帝不想为难小明,于是小明天生就已经习得了1号天赋-----"打架".于是小明

【bzoj4031】[HEOI2015]小Z的房间 &amp;&amp; 【bzoj4894】天赋 (矩阵树定理)

来两道矩阵树模板: T1:[bzoj4031][HEOI2015]小Z的房间 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着.你想要打通一些相邻房间的墙,使得所有房间能够互相到达.在此过程中,你不能把房子给打穿,或者打通柱子(以及柱子旁边的墙).同时,你不希望在房子中有小偷的时候会很难抓,所以你希望任意两个房间之间都只有一条通路.现在,你希望统计

【bzoj4894】天赋 矩阵树定理

题目描述 小明有许多潜在的天赋,他希望学习这些天赋来变得更强.正如许多游戏中一样,小明也有n种潜在的天赋,但有一些天赋必须是要有前置天赋才能够学习得到的.也就是说,有一些天赋必须是要在学习了另一个天赋的条件下才能学习的.比如,要想学会"开炮",必须先学会"开枪".一项天赋可能有多个前置天赋,但只需习得其中一个就可以学习这一项天赋.上帝不想为难小明,于是小明天生就已经习得了1号天赋-----"打架".于是小明想知道学习完这n种天赋的方案数,答案对1

【bzoj4894】天赋

Portal-->bzoj4894 Solution 这题的话其实,一句话题意就是求..外向树(方向是根往叶子).. 然后关于有向图的生成树计数的话,求外向树就是将度数矩阵改成入度,内向树就是改成出度 ? 然后其他的一样的 代码大概长这个样子 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=310,MOD=1e9+7; int a[N][N

聊聊成为大神路上的过程(决定伟大水平和一般水平的关键因素,既不是天赋,也不是经验,而是[刻意练习]的程度,要多看别人的代码)

每个人都在成为大神的路上,只不过有的人在走,而有的人在跑. 写在前面的话 在开始正文之前我先跟大家分享一个我身边的例子.我有两个朋友,A和B.B从高一开始打dota,A从高二开始,到高中毕业的时候,A已经是一个 2100分的大神级别的人物,而B只有1200分而已.为什么A打的时间比B短,而水平却比B高呢?是天赋?是智商?似乎都不是. 我对两个人还是比较了解的,虽然同样是打dota,但是A和B之间有着很大差别的.A除了像B一样打dota之外,会看一些成名已久的大神的教学视 频,会看自己打dota的

[转] 评 WOW技能天赋设计

本文转至:http://bbs.chinaunix.net/thread-1692302-8-1.html(只作转载, 不代表本站和博主同意文中观点或证实文中信息) 再比如,传说中的面向对象本该大显神威的游戏领域--就说流行的WOW吧. 这个游戏有10个职业,10个种族,每个种族都有自己的几个特有种族天赋(这个种族天赋还可能根据职业有所不同,比如血精灵):每个职业有几十甚至上百种不同的技能/法术,这些技能有近战技能,有远程技能:有的技能会对敌方造成伤害或不良状态,有的技能能给己方队友加上好的状态

大部分人努力程度之低,根本轮不到拼天赋 [转自w3cschool]

2014-05-31 w3cschool 在过去的三个多月里,每周六一天的心理咨询师的培训课成了我一周中最重要最开心的事情之一.因为国庆节的缘故,从9月中旬到10月中旬培训中心都没有安排课程,因此习惯每周六去上课的我在假期里反而一时颇为不习惯. 放假之前,我去另一个校区听了一次课,那个班比我所在的班级课程的进度快一些.课间听到那个头发半白的班主任讲话,班上的学生争相传阅一份成绩单,我才知道他们已经考过入门考了.班主任对学生说:"考试之前,我就有预测,那些每次上课都来的学生都会考过,那些每次来还坐

HDU 2594 Simpsons’ Hidden Talents(辛普森一家的潜在天赋)

HDU 2594 Simpsons’ Hidden Talents(辛普森一家的潜在天赋) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) [Description] [题目描述] Homer: Marge, I just figured out a way to discover some of the talents we weren’t aware we had. Marge:

2014---努力才是真天赋

"青春不是指生命的一段时间,而是指一种精神状态.青春意味着在气质上勇敢多于怯懦,冒险进去多于舒适苟安. .人变老不仅由于年岁的增长,更是由于放弃了对理想的追求." 所谓三岁看老,童年的时候你经历的那些鸡毛蒜皮,结结实实的决定了你如今的一言一行.尽管我们经常怀念童年的天真美好,却也不是否能定童年带给我们一辈子都难以逃脱的枷锁.非常多时候停下来想想,你最接受不了的事,最喜欢的事只是都是童年小枝小桠的放大模型. 童年印象最深的那些事构成了我的轮廓,多年的现实浇灌成为如今的我.一步一步的去看清