依然是liurujia計數練習題。依然是自己想沒想出來,在mod是素數的情況下除以x即為乘x的逆。這個真心以前沒聽過,用了這個方法後處理就變得十分巧妙。
整個程式步驟還是很清晰的,先上來算階乘與逆(求數的逆還是有點沒理解透,需要後續章節繼續學習)。然後讀入建圖只能用鄰接表了,注意加上最開始的那個根節點就行了。
然後就是搜尋按照書上的公式計算就行了。
**如下:
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7view code#define len 40100
8#define mod 1000000007
9#define ll long long
10using
namespace
std;
1112
intn, m, isrt[len];
13ll jc[len], rjc[len], ans;
14 vectormap[len];
1516
//擴充套件歐幾里德
17 ll extend_gcd(ll a, ll b, ll &x,ll &y)
23else
27return
_m;28}29
30//
初始化階乘和他的逆
31void
cntjc()
3241}42
43void
init()
4449
//建圖
50int
a, b;
51 scanf("
%d%d
", &n, &m);
52for(int i=0; i)
57//
加入總的根節點
58for(int i=1; i<=n; i++)61}
6263
int dfs(int
vex)
6469
if(vex) ans = ans*rjc[cnt]%mod;
70return
cnt;71}
7273
intmain()
7487
return0;
88 }
uva1352 排列組合
題意 給你幾個正方體,每個正方體的六個面都塗有顏色,現在你要把這些正方體重新塗色,使得所有正方體都一樣 六個面顏色相同,正方體可以旋轉 問最少重塗幾個面 思路 首先,如果正方體不能旋轉,那麼要怎麼塗.很顯然,每一面都找出一樣的顏色最多的那個顏色,把其他的都塗成這個顏色,那麼就是最少的.但是正方體可以...
Uva 580 排列組合
我發現數學還是很有用的 o 想了一節課才推出式子,數學競賽的一會就想出來了orz.要看排列組合的書了.推導過程有時間在寫估計不會了 code include include include include include include include define fo i,a,b for int...
8 排列組合
1 2 permutations 3 排列組合 4 輸入abc,輸出所有可能的排列結果 5 輸入 abc 6 輸出 abc 7 acb 8 bac 9 bca 10 cab 11 cba 12 1314 include15 16using namespace std 1718 int c1 0 19...