P4455 CQOI2018 社交網路

2022-03-13 05:07:26 字數 1786 閱讀 5793

這個題仔細一看就是生成樹計數,但是我這個記性是真的差,早就忘了。複習了一下高斯消元,然後這個題就是很裸的題了。

ps:高斯消元解行列式的時候要取反。

題幹:

題目背景

當今社會,在社交網路上看朋友的訊息已經成為許多人生活的一部分。通常,乙個使用者在社交網路上發布一條訊息(例如微博、狀態、tweet等) 後,他的好友們也可以看見這條訊息,並可能**。**的訊息還可以繼續被人**,進而擴散到整個社交網路中。

題目描述

在乙個實驗性的小規模社交網路中我們發現,有時一條熱門訊息最終會被所有人**。為了研究這一現象發生的過程,我們希望計算一條訊息所有可能的**途徑有多少種。為了程式設計方便,我們將初始訊息傳送者編號為1,其他使用者編號依次遞增。

該社交網路上的所有好友關係是已知的,也就是說對於a、b 兩個使用者,我們知道a 使用者可以看到b 使用者傳送的訊息。注意可能存在單向的好友關係,即la 能看到b 的訊息,但b 不能看到a 的訊息。

還有乙個假設是,如果某使用者看到他的多個好友**了同一條訊息,他只會選擇從其中乙個**,最多**一次訊息。從不同好友的**,被視為不同的情況。

如果用箭頭表示好友關係,下圖展示了某個社交網路中訊息**的所有可能情況。 (初始訊息是使用者1傳送的,加粗箭頭表示一次訊息**)

輸入輸出格式

輸入格式:

輸入檔案第一行,為乙個正整數n,表示社交網路中的使用者數; 第二行為乙個正整數m,表示社交網路中的好友關係數目。

接下來m 行,每行為兩個空格分隔的整數aia_iai​和bib_ibi​,表示一組好友關係,即使用者aia_iai​ 可以看到使用者bib_ibi​ 傳送的訊息。

輸出格式:

輸出檔案共一行,為一條訊息所有可能的**途徑的數量, 除以10007 所得的餘數。

**:

#include#include

#include

#include

#include

#include

#include

using

namespace

std;

#define duke(i,a,n) for(register int i = a;i <= n;++i)

#define lv(i,a,n) for(register int i = a;i >= n;--i)

#define clean(a) memset(a,0,sizeof(a))

const

int inf = 1

<< 30

;typedef

long

long

ll;typedef

double

db;template

void read(t &x)

template

void

write(t x)

const

int mod = 1e4 + 7

;int

n,m;

int f[255][255

];int

gauss()

swap(f[i],f[j]);

ans = -ans;}}

if(f[i][i] == 0) return0;

ans = (ans * f[i][i]) %mod;

}return (ans + mod) %mod;

}int

main()

duke(i,

1,n)

}printf(

"%d\n

",gauss() %mod);

return0;

}

CQOI2018 社交網路

當今社會,在社交網路上看朋友的訊息已經成為許多人生活的一部分。通常,乙個使用者在社交網路上發布一條訊息 例如微博 狀態 tweet等 後,他的好友們也可以看見這條訊息,並可能 的訊息還可以繼續被人轉 發,進而擴散到整個社交網路中。在乙個實驗性的小規模社交網路中我們發現,有時一條熱門訊息最終會被所有人...

bzoj5297 Cqoi2018 社交網路

題目描述 bz題解 有向圖矩陣樹定理裸題。與無向圖區別是,對於一條邊 u,v 在基爾霍夫矩陣中令 a v v a u v 同時以 k 為根時要扔掉第 k 行第 k 列。include include include include using namespace std typedef long l...

BZOJ5297 CQOI2018 社交網路

考前掙扎 有向圖生成樹 我們知道對於無向圖生成樹可以通過矩陣樹定理來算具體就是 度數矩陣 鄰接矩陣 去掉任意一行一列得到余子式 對行列式求值 有向圖生成樹分為外向和內向兩種 外向生成樹當然是所有邊指向兒子 他的矩陣樹定理是這個樣子 對於有向邊 x,y 度數矩陣d y y 鄰接矩陣e x y 內向生成...