黑暗城堡(最小生成樹)

2022-05-25 03:21:12 字數 797 閱讀 9451

傳送門

解析

這道書上例題主要用dijkstra演算法解決,但是關鍵的一步是如何計算有多少種方案。

「統計有多少個節點滿足x屬於t,並且dis[p]=dis[x]+edge(x,p)」,其中edge表示邊的長度。

根據乘法原理,我們把每一步統計出的數量乘起來,就得到了題目的結果。

#include#define inf 1e12;

using

namespace

std;

intn,m;

long

long dis[1010][1010],g[20000],cnt[20000

];bool vis[2000000]=;

intmain()

intx,y,z;

for(int i=1;i<=m;i++)

}for(int i=1;i<=n;i++)

for(int i=1;i<=n;i++)//

二、用迪傑斯特拉演算法求出一號房間到每個房間的單源最短路

}vis[u]=1

;

for(int j=1;j<=n;j++)}}

long

long ans=1

;

for(int i=1;i<=n;i++)//

三、方案累加

}for(int i=1;i<=n;i++)

cout

<}

黑暗城堡 (最小生成樹 最短路)

咕咕咕 prim的特點是從乙個點開始,不斷把距離最短的點加入圖中,在以此延伸。是一種貪心的想法。當知道prim的特點的時候,就可以想到這題用prim。這題又要求實際路徑 最短路徑,也可以想到用dijkstra。具體做法 用dijkstra求出1號犯賤到每個房間的單元最短路。把樹形城堡看做以1為根的有...

最小生成樹 次小生成樹

一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 1.兩點之間的路徑是唯一的。2.邊數等於點數減一。3.連線任意兩點都會生成乙個環。對於乙個無向聯通圖g的子圖,如果它包含g的所有點,則它被稱為g的生成樹,而各邊權和最小的生成樹則被稱...

最小生成樹

package 圖 最小生成樹是用最少的邊吧把所有的節點連線起來。於是和圖的深度優先搜素差不多。class stack public void push int key public int pop 檢視棧頂的元素 public int peek public boolean isempty cla...