初見安~這裡是乙個我沒用過的**的和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...