CH6202 黑暗城堡

2021-09-24 01:37:55 字數 1205 閱讀 4602

初見安~這裡是乙個我沒用過的**的和bzoj的入門oj的傳送門:ch6202 & 入門oj p4928

第一行有兩個整數 n 和 m。

之後 m 行,每行三個整數 x,y 和 l,表示可以修建 x 和 y 之間的一條長度為 l 的通道。

2≤n≤1000,n – 1≤m≤n(n – 1)/2,1≤l≤100

輸出乙個整數,表示答案對 2^31 – 1 取模之後的結果。

3 3

1 2 2

1 3 1

2 3 1

2
這是乙個最短路徑樹的典例之一。題意很明確——問你有多少條棵短路徑樹。【注意,不是多少條最短路,和最短路計數是不一樣的

雖然看起來n比較大,但是是單源的所以不用擔心複雜度會爆掉。求一遍最短路,然後列舉每個點以及連出去的邊,看看有多少條到達這個點的路徑長度是等於最短路徑的。最後累乘起來就行了。

可以直接看**的:)

#include#define maxn 1005

#define maxm 500005

#define inf 2147483647

using namespace std;

int read()

int n, m;

long long ans = 1;

struct edge

edge(int tt, int ww, int nn)

}e[maxm << 1];

int head[maxn], k = 0;

void add(int u, int v, int w)

int dis[maxn];

bool vis[maxn];

void dij()//dijkstra堆優化求最短路 }}

int cnt[maxn];

int main() }

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

if(cnt[i]) ans = ans * cnt[i] % inf;//注意要取模

printf("%lld\n", ans);

return 0;

}

有點暴力呀……但是還是可以180+ms完美通過的~

超級開心,因為是自己寫出來然後一遍過的》w<

迎評:)

——end——

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

傳送門 通過學習我們可以發現原題目要求的樹結構就是 最短路徑生成樹 什麼是最短路徑生成樹呢?就是一張圖的源點到圖中的所有結點的最短路徑構成的樹,為什麼他滿足樹結構呢?因為假設有n個點,因為是最短路徑一定只有n 1條邊把他連起來。那對於本題,每個點的d i d i d i 可以先跑一遍dij kstr...

T57274 黑暗城堡

先求出各個點到 1 的最短路徑。分別用兩個陣列將最短路徑記錄下來 乙個要用來排序 按排序後的 dis 值從小到大列舉各點加入樹有多少種方案,最後根據乘法原理把各個點的方案數乘起來就是答案。實現起來會比較繁瑣 include include include include include includ...

黑暗城堡(最小生成樹)

傳送門 解析 這道書上例題主要用dijkstra演算法解決,但是關鍵的一步是如何計算有多少種方案。統計有多少個節點滿足x屬於t,並且dis p dis x edge x,p 其中edge表示邊的長度。根據乘法原理,我們把每一步統計出的數量乘起來,就得到了題目的結果。include define in...