咕咕咕

prim的特点是从一个点开始,不断把距离最短的点加入图中,在以此延伸。是一种贪心的想法。当知道prim的特点的时候,就可以想到这题用prim。

这题又要求实际路径=最短路径,,也可以想到用dijkstra。

具体做法:

用dijkstra求出1号犯贱到每个房间的单元最短路。把树形城堡看做以1为根的有根树。

把所有节点按照dis值排序,从小到大一次考虑吧每个节点p加入树形城堡有多少种方法。

和prim类似,维护“最短路径生成树”的一部分记为T

统计有多少个节点x满足,x∈T并且dis[ p ] = dis [ x ] + edge ( x , p ),其中edge表示边的长度。

让p与其中任意一个x项链都符合题目的要求。

根据乘法原理,把每一步统计出的数据乘起来,即可得答案。

#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#define mk make_pair
#define ll long long
using namespace std;
inline int read()
{int sum = 0,p = 1;char ch = getchar();while(ch < '0' || ch > '9'){if(ch == '-')p = -1;ch = getchar();}while(ch >= '0' && ch <= '9'){(sum *= 10) += ch - '0';ch = getchar();} return sum * p;
}const int M = 5e5 + 10;
const int N = 1e3 + 5;
const int mod = 2147483647;
int n,m;
int head[N],cnt;
struct edge
{int nxt,to,wei;
}e[M<<1];
priority_queue<pair<int,int> > q;
bool vis[N];
int dis[N],sum[N];
struct pot
{int id,dis;
}p[N];void add(int x,int y,int v)//加边
{e[++cnt].nxt = head[x];e[cnt].to = y;e[cnt].wei = v;head[x] = cnt;
}void dijkstra()
{memset(dis,0x3f,sizeof(dis));dis[1] = 0;q.push(mk(0,1));while(q.size()){int u = q.top().second;q.pop();if(vis[u])continue;vis[u] =true;for(int i = head[u];i;i = e[i].nxt){int v = e[i].to;if(dis[u] + e[i].wei < dis[v]){dis[v] = dis[u] +e[i].wei;q.push(mk(-dis[v],v));}} }
}bool cmp(pot a,pot b)
{return a.dis < b.dis;
}int main()
{n = read(),m = read();for(int i = 1;i <= m;i++){int x = read(),y = read(),l = read();add(x,y,l);add(y,x,l); } dijkstra();//    for(int i = 1;i <= n;i++)
//        printf("%d-===-%d\n",i,dis[i]);
//    puts("\n");for(int i = 1;i <= n;i++){p[i].id = i;p[i].dis = dis[i];}sort(p+1,p+n+1,cmp);memset(vis,false,sizeof(vis));vis[1] = true;for(int i = 2;i <= n;i++){vis[p[i].id] = true;for(int j = head[p[i].id];j;j = e[j].nxt){int v = e[j].to;if(vis[v] && dis[v] + e[j].wei == p[i].dis)sum[i]++;}}
//    for(int i = 1;i <= n;i++)
//        printf("%d----%d\n",i,sum[i]);
        ll ans = 1;for(int i = 2;i <= n;i++)ans = (ans * sum[i])%mod;printf("%lld",ans);return 0;
}

转载于:https://www.cnblogs.com/darlingroot/p/11278752.html

黑暗城堡-(最小生成树+最短路)相关推荐

  1. LOJ:黑暗城堡(最短路)

    题目描述 求一个图关于1的最小路径树的方案数 解析 想复杂了qwq 跑dij的时候如果dis[now]+w==dis[to],就使cnt[to]++ 如果更新dis,cnt赋值成1 最后乘起来即可 本 ...

  2. 信息奥赛一本通1486: CH 6202 黑暗城堡 最短路径生成树计数

    1486:黑暗城堡 [题目描述] 知道黑暗城堡有 N 个房间,M 条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设 Di为如果所有的通道都被修建,第 i 号房间与第 1 ...

  3. SPFA算法+例题 :问题 A: 黑暗城堡

    SPFA算法 算法思想: 1) 三角形中的性质:同一三角形内两边之和大于第三边. 2)由上面那一条性质,我们可以想出一个方法来更新源点到其他点的最短的路径:用中间节点k松弛u->k->v, ...

  4. 一本通 P1486 【黑暗城堡】

    题库 :一本通 题号 :1486 题目 :黑暗城堡 link :http://ybt.ssoier.cn:8088/problem_show.php?pid=1486 思路 :这道题既然要求使加入生成 ...

  5. 黑暗城堡 最短路径生成树

    dark♂城堡(233 题目描述 一个图,有n个节点,m条带权值无向边,构造一颗生成树,使得树上的点到根(1)的距离为该点到1的最短距离.输出符合条件的生成树的个数 答案模取\(2^{31}-1\) ...

  6. acwing349 黑暗城堡 ——最短路径生成树

    Link 思路 最短路径生成树计数 代码 // // #include <bits/stdc++.h> using namespace std; //#define mp make_pai ...

  7. LOJ 一本通一句话题解系列:

    第一部分 基础算法 第 1 章 贪心算法 1):「一本通 1.1 例 1」活动安排:按照结束时间排序,然后扫一遍就可以了. 2):「一本通 1.1 例 2」种树:首先要尽量的往区间重叠的部分种树,先按 ...

  8. 牛客刷题之图论-最小生成树

    题目集链接 目录 1.黑暗城堡 2.北极通讯网络 3.新的开始 4.构造完全图 5.秘密的牛奶运输 6.Tree 7.最小生成树计数 8.次小生成树 1.黑暗城堡 先求出最小生成树的每个边权,然后枚举 ...

  9. 《算法进阶指南》最小生成树剩余题目

    CH6201 走廊泼水节 CH6202 黑暗城堡 转载于:https://www.cnblogs.com/LLbinGG/p/9910965.html

最新文章

  1. C#按关闭按钮实现最小化,按ESC才关闭的实现【含系统消息大全】
  2. linux Address already in use 端口被占用解决办法
  3. AI 与区块链:两大热门技术,会碰撞出什么样的火花?
  4. 官方教育网代理地址MSN
  5. 李宏毅线性代数笔记4:向量
  6. 使用Lambda表达式重构委托
  7. VTK:可视化算法之DecimateHawaii
  8. MDK调试:设置断点处,代码运行的次数
  9. 送书|北大出版:R语言数据分析与可视化从入门到精通
  10. c语言指针代码大全,C语言之指针(示例代码)
  11. php 合并 js css,PHP实现合并多个JS和CSS文件示例
  12. 支付宝回调验签失败解决办法
  13. 嵌入式操作系统内核原理和开发(固定内存分配算法)
  14. 手把手教你详细分析 Chrome 1day 漏洞 (CVE-2021-21224)
  15. 【基础】CNN是靠什么线索学习到深度信息的?——一个经验性探索
  16. Python和C++交互
  17. win10 华硕ASUS USB AC56 无线网卡 欧版 5G 信号不全 问题修复
  18. 平均年薪23万!为什么却很少见程序员炫富?
  19. [python]打日语
  20. robosense激光雷达使用及适配autoware

热门文章

  1. 数据可视化工具zeppelin安装
  2. SQL Server 获取表或视图结构信息
  3. JAVA 正则表达式 分组
  4. Github上Pandas,Numpy和 Scipy三个库中20个最常用的函数
  5. Go程序性能分析pprof
  6. 基于弹性束图匹配的人脸识别
  7. linux 更新yum源 改成阿里云源
  8. 火狐浏览器不执行alert的问题
  9. NSDictionary
  10. Centos7部署JAVA环境