BZOJ 1002 FJOI2007 輪狀病毒

2021-09-25 04:49:07 字數 2090 閱讀 4838

好久好久好久好久沒寫部落格了,因為csdn改版了,一直不大喜歡,所以也就不大樂意上部落格了。

。事實上說起來也沒什麼題好寫的,有時候還是會做到好題的。因為已經忘記了csdn忘記了我有部落格,於是就沒寫了。

but 如今還是繼續開始吧,有什麼感覺不錯的題還是能夠mark下的。

接下來是題意,中文題就是好,直接上題目。

思路:題目就是求最小生成樹的種數。中心的點必需要和周圍的一圈點連通。能夠先不要管環,先考慮鏈的情況

dp[ i ][ 0 ]表示第i個點還沒和中心點連通,而且前i-1個點和中心點或者第i個點是連通的

dp[ i ][ 1 ]表示前i個點所有都已經和中心點連通了

非常easy能夠推出狀態轉移方程 :

dp[ i ][ 0 ] = dp[ i-1 ][ 0 ] + dp[ i-1 ][ 1 ]

dp[ i ][ 1 ] = dp[ i-1 ][ 0 ] + dp[ i-1 ][ 1 ]*2

那麼對於n輪狀病毒。能夠列舉第乙個點和多少個周圍的點連通,其餘的點就是一條鏈的情況了。

ps: 高精度是必須的

code:

#include 

#include

#include

#include

#include

using namespace std;

const int numlen = 205;

struct bign

bign(int num)

bign(const char *num)

bign operator = (const int num)

bign operator = (const char *num)

void deal()

bign operator + (const bign &a)const

return ret;

}bign operator *(const int num) const

while(bb)

ret.deal();

return ret;

}string str() const

};istream& operator >> (istream &in, bign &x)

ostream& operator << (ostream &out, const bign &x)

const int n = 100+5;

bign dp[n][2], ans[n];

void init(int n)

for(int i = 1;i <= n; i++)

}} int main()

bign(int num)

bign(const char *num)

bign operator = (const int num)

bign operator = (const char *num)

void deal()

bign operator + (const bign &a)const

return ret;

}bign operator *(const int num) const

while(bb)

ret.deal();

return ret;

}string str() const

};istream& operator >> (istream &in, bign &x)

ostream& operator << (ostream &out, const bign &x)

const int n = 100+5;

bign dp[n][2], ans[n];

void init(int n)

for(int i = 1;i <= n; i++)

}} int main(){

int n;

scanf("%d", &n);

init(n);

cout<

FJOI2007 bzoj1002 輪狀病毒

description 輪狀病毒有很多變種,所有輪狀病毒的變種都是從乙個輪狀基產生的。乙個n輪狀基由圓環上n個不同的基原子 和圓心處乙個核原子構成的,2個原子之間的邊表示這2個原子之間的資訊通道。如下圖所示 n輪狀病毒的產生規律是在乙個n輪狀基中刪去若干條邊,使得各原子之間有唯一的資訊通道,例如共有...

BZOJ 1002 FJOI2007 輪狀病毒

1002 fjoi2007 輪狀病毒 time limit 1 sec memory limit 162 mb description 輪狀病毒有很多變種,所有輪狀病毒的變種都是從乙個輪狀基產生的。乙個n輪狀基由圓環上n個不同的基原子 和圓心處乙個核原子構成的,2個原子之間的邊表示這2個原子之間的資...

BZOJ1002 FJOI2007 輪狀病毒

標籤 高精度,數學 description 輪狀病毒有很多變種,所有輪狀病毒的變種都是從乙個輪狀基產生的。乙個n輪狀基由圓環上n個不同的基原子 和圓心處乙個核原子構成的,2個原子之間的邊表示這2個原子之間的資訊通道。如下圖所示 n輪狀病毒的產生規律是在乙個n輪狀基中刪去若干條邊,使得各原子之間有唯一...