#include #define rep(i, a, b) for(int i = (a); i <= (b); i ++ )
using namespace std;
using ll = long long;
template void chkmax(t &x, t y)
template void chkmin(t &x, t y)
constexpr int n = 1e5 + 10;
int n, mod;
ll dp[n], pre[n], suf[n], pd[n], ans[n];
vectoredge[n];
void dfs(int u)
}void dfs2(int u)
//suf[i]陣列是處理 u 的子樹中後 n - i -> n 的所有子樹所能產生的連通塊的總數目
suf[m] = 1;
for(int i = m - 1; i >= 0; i -- )
//pd陣列是 u 的父節點所產生的 連通塊的總數目
//利用乘法原理可以得出結果
for(int i = 0; i < m; i ++ )
for(int &v: edge[u])
}int main()
dfs(1);
dfs2(1);
ans[1] = dp[1];
for(int i = 1; i <= n; i ++ )
return 0;
}
聯通珍珠塊
有n個點,n 1條邊的一棵樹,給出它的每條邊x,y,求有多少種剪法剪短其中的某些邊使得還連著的每一塊都有相同的點數,注意 不能不剪,可以全剪 樣例輸入 61 2 2 32 4 4 55 6 樣例輸出 用鄰接表儲存圖 cin n for int i 1 i n 1 i 用深搜列舉出每一棵子樹的結點數,...
DFS求聯通塊
題目 輸入乙個m行n列的字元矩陣,只要有兩個 相鄰就能組成乙個聯通塊,如下面的字元矩陣有2個聯通塊分析 將字元矩陣看作乙個圖,用dfs對圖中的字元遍歷,從每個 出發,遍歷 周圍的字元。每次訪問時給該位置打上塊標誌,表示已訪問,從而避免多次訪問同乙個位置。include include define ...
強聯通塊tarjan演算法
第一問 需要幾個學校存在軟體,才能通過傳遞,使得所有的學校都有軟體 用tarjan演算法求出強聯通分量後,將每個聯通分量縮成乙個點,那麼問題1的答案就是入度為0的點的個數 為什麼?入度為0的點,肯定不能通過其他學校傳送軟體給他,所以他必須存在乙份軟體 第二問 需要加幾條邊,才能使得圖強聯通 縮點後,...