一道mst……
最開始是毫無頭緒,於是就點開了--->題解
大部分題解都是矩陣樹……然而第一篇題解告訴了我們暴搜也能過(
思路大概是說,對於乙個圖\(g\),它的所有最小生成樹的相同權值的邊的數量是相等的。
(這裡批評自己一下(雖然ac了但是最終沒有證明這個思路的正確性()
(不過花了一些時間來嘗試……最後沒能成功舉出反例,於是就預設這是對的了()
對邊的權值排序,直接跑一遍mst,用結構體來記錄相同權值的邊出現的次數。然後暴搜一通邊就完了qwq
神仙資料
#include #include #include #include #include #define mod 31011
#define maxn 105
#define maxm 1005
using namespace std;
struct segm
e[maxm];
struct sums
a[maxm];
int n,m,f[maxn],toti=0,tot=0,sum,ans=1;
int find(int q)
bool cmp(segm x,segm y)
void dfs(int wei,int cur,int del)
return;
} int xx=find(e[cur].u),yy=find(e[cur].v);
if (xx!=yy)
dfs(wei,cur+1,del);
return;
}int main()
for (int i=1;i<=m;i++)
sort(e+1,e+m+1,cmp);
for (int i=1;i<=m;i++)
int xx=find(e[i].u),yy=find(e[i].v);
if (xx!=yy)
} if (toti!=n-1)
a[tot].r=m;
for (int i=1;i<=n;i++)
for (int i=1;i<=tot;i++)
}} printf("%d",ans);
return 0;
}
hdu 4408 最小生成樹計數
經典題了 include include include include include include include include include include include include include include using namespace std define clr a,...
JSOI2008 最小生成樹計數
time limit 1 sec memory limit 162 mb 現在給出了乙個簡單無向加權圖。你不滿足於求出這個圖的最小生成樹,而希望知道這個圖中有多少個不同的 最小生成樹。如果兩顆最小生成樹中至少有一條邊不同,則這兩個最小生成樹就是不同的 由於不同的最小生 成樹可能很多,所以你只需要輸出...
JSOI2008 最小生成樹計數
bzoj luogu 根據最小生成樹的一些性質,不同的最小生成樹固定權值的邊數是一樣的 而且我們發現這題同權的邊數 10 於是可以預處理出每種權值需要多少條邊,然後爆搜 然後不能路徑壓縮,不然你怎麼回溯.注意到n只有100,暴力並查集搜根沒有任何問題 複雜度 o 邊權數 2 最壞也就是 100 10...