文章
26
粉丝
407
获赞
0
访问
333.9k
(1)最短路径树和最小生成树的区别:
最短路径树:源点到其它所有节点的最短路径构成的树。实际上是一个(DAG)
最小生成树:网络中任意两个顶点可达,且边集总长度最小,不能保证源点到其它点距离最小。
(2)求最短路径树的数量:乘法原理(记录每个节点的父节点可取数cnt[i]表示i号节点可取父节点)
则SPT数量为: cnt[1]*cnt[2]*....cnt[n]
(ans*=cnt[i]%MOD)!=(ans=ans*cnt[i]%MOD)
#include<iostream>
#include<queue>
using namespace std;
int n, m;
const int MAXN = 1010;
const int MAXE = 2010;
const int MOD = 2147483647;
int cnt[MAXN];
struct edge{
int from, to, weight;
int next;//指向下一个节点
}Edge[MAXE];
int idx = 0, h[MAXN];
void add(int a, int b, int c){
Edge[++idx].from = a;
Edge[idx].to = b;
Edge[idx].weight = c;
Edge[idx].next = h[a];
h[a] = idx;
}
struct node{
int u, d;//从源点到u的最短路径
bool operator <(const node a)const{
return d>a.d;
}
};
int dis[MAXN];
void dijkstra(){
memset(dis, 0x3f3f3f3f, sizeof dis);
priority_queue<node>q;
q.push({ 1, 0 });
dis[1] = 0;
while (q.size()){
node now = q.top();
q.pop();
for (int i = h[now.u]; i; i = Edge[...
登录后发布评论
暂无评论,来抢沙发