考前掙扎
有向圖生成樹
我們知道對於無向圖生成樹可以通過矩陣樹定理來算具體就是
度數矩陣 - 鄰接矩陣 去掉任意一行一列得到余子式 對行列式求值
有向圖生成樹分為外向和內向兩種
外向生成樹當然是所有邊指向兒子 他的矩陣樹定理是這個樣子
對於有向邊(x,y)度數矩陣d[y][y] ++ 鄰接矩陣e[x][y] ++
內向生成樹所有邊指向父親
對於有向邊(x,y)度數矩陣d[x][x] ++ 鄰接矩陣e[x][y] ++
(說白了就是外向生成樹反過來)
記憶的乙個方法就是度數矩陣只記錄入邊(就是生成樹的入邊 【**不會點**
然後照常進行度數-鄰接 然後我們由於是有向邊 那麼我們去掉的一行一列(i,i)就表示以i為根
然後正常行列式求值即可
(這個題小坑點 邊是反著讀的= =
//love and freedom.
#include#include#include#include#define inf 20021225
#define ll long long
#define mdn 10007
#define n 300
using namespace std;
int a[n][n],n,m;
int inv[mdn];
int gauss()
int iv = inv[a[i][i]];
for(int j=i+1;j<=n;j++)
}for(int i=1;i<=n;i++)
ans = ans*a[i][i]%mdn;
return ans<0?ans+mdn:ans;
}int main()
n--; printf("%d\n",gauss());
return 0;
}
bzoj5297 Cqoi2018 社交網路
題目描述 bz題解 有向圖矩陣樹定理裸題。與無向圖區別是,對於一條邊 u,v 在基爾霍夫矩陣中令 a v v a u v 同時以 k 為根時要扔掉第 k 行第 k 列。include include include include using namespace std typedef long l...
bzoj1257 CQOI 餘數之和
題目 time limit 5 sec memory limit 162 mb submit 2383 solved 1105 submit status discuss 給出正整數n和k,計算j n,k k mod 1 k mod 2 k mod 3 k mod n的值,其中k mod i表示k除...
BZOJ1818 Cqoi2010 內部白點
給定平面上的一些黑點,其它位置都是白點,乙個白點如果上下左右都有黑點就會變成黑點,求最終會有多少個黑點 就是求交點個數 離散化後,取出所有線段,然後沿任意乙個軸朝著乙個方向掃,然後把平行於另乙個軸的線段用端點記錄,掃到一端就在樹狀陣列裡 1,另一端 1,樹狀陣列求個區間和貢獻答案即可 const m...