dark♂城堡(233

题目描述

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

输入输出格式略

数据范围 \(n<=1000\)


这道题如果不考虑时间优化的话,跑\(O(N^2)\)的dij是完全可以的;

如何统计个数? 我们相当于把点i 连在所有比他到根的最短距离短的点上,并且判断是否合法。利用乘法原理计数就可以了。

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
int map[1010][1010];
int point[1010],dis[1010];
bool vis[1010];
const long long mode=(1LL<<31)-1;
bool compare(const int &a,const int &b)
{return dis[a]<dis[b];
}
int main()
{int n,m;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)map[i][j]=0x7ffffff;int a,b,c;for(int i=1;i<=m;i++){scanf("%d%d%d",&b,&a,&c);map[a][b]=map[b][a]=min(map[a][b],c);}for(int i=1;i<=n;i++)   point[i]=i,dis[i]=0x7ffffff;dis[1]=0;for(int i=1;i<=n;i++){int cur=-1;for(int j=1;j<=n;j++)if((cur==-1||dis[cur]>dis[j])&&!vis[j])cur=j;vis[cur]=true;for(int j=1;j<=n;j++)dis[j]=min(dis[j],dis[cur]+map[j][cur]);}//n^2 的 dijsort(point+1,point+1+n,compare);//point里存点的标号,然后按照dis排序long long ans=1;for(int i=2;i<=n;i++){long long tot=0;for(int j=1;j<i;j++)if(dis[point[i]]-map[point[i]][point[j]]==dis[point[j]])//符合条件的点tot+=1;ans=(ans*tot)%mode;//乘法原理计数}printf("%lld",ans);//输出
}

转载于:https://www.cnblogs.com/Lance1ot/p/9228414.html

黑暗城堡 最短路径生成树相关推荐

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

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

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

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

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

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

  4. 黑暗城堡-(最小生成树+最短路)

    咕咕咕 prim的特点是从一个点开始,不断把距离最短的点加入图中,在以此延伸.是一种贪心的想法.当知道prim的特点的时候,就可以想到这题用prim. 这题又要求实际路径=最短路径,,也可以想到用di ...

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

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

  6. 最短路径生成树与最小生成树

    虽然放在一起,但是他们两个除了都是树之外没有一点关系. 最短路径生成树,就是ROOT根节点到达任意点距离最短的路径所构成的树,就是最短路径生成树.我画两个图给大家理解. 最短路径生成树 最小生成树 这 ...

  7. 最短路径生成树计数+最短路径生成树

    最短路径生成树计数. 我们应该先明白什么是最短路径生成树,不会戳这里. 计数方法明显是要使用乘法原理计数,也就是说我们可以得出每一步的方案数再乘进答案中. 接下来考虑如何的出每一步的方案数,所谓方案数 ...

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

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

  9. OI每周刷题记录——lrllrl

    看这标题就知道我是模仿的hzwer大佬,远程%%% 大佬的OI经历让蒟蒻我深受感触,为了晚一些AFO本蒟蒻也得加油了 从高二上期第一周开始计数,每个星期天更一次,一直更到我AFO 如果这是我此生最后一 ...

最新文章

  1. Http 请求头中的 Proxy-Connection
  2. python用jieba进行分词并可视化
  3. Java多线程闲聊(五):AQS
  4. 深度探索C++ 对象模型(6)-Data member的存取
  5. Linux 查询 OS、CPU、内存、硬盘信息
  6. Creating Apps With Material Design —— Creating Lists and Cards
  7. 关于·nowrap与width
  8. delphi连接mysql不用添加DSN(mysql connector odbc 5.1版)
  9. 一位财务自由人士的投资修行
  10. 【端口扫描工具】nmap核心使用方法
  11. dell笔记本耳机怎么设置_戴尔笔记本电脑怎样设置耳机
  12. 百度SEM/SEO关键词批量自动分词工具
  13. 10^5以下素数筛法——素数表法
  14. dig命令的常见用法详解
  15. 多玩英雄联盟插件盒子v3.8.0
  16. 获取最新职位通过在线作业分类
  17. C. New Year and the Sphere Transmission
  18. Sketchup快捷键设置存储位置
  19. 【JY】YJK前处理参数详解及常见问题分析(五):风荷载信息
  20. RocksDB Compaction(二)源码分析

热门文章

  1. python可以做什么 知乎-python能做什么知乎
  2. python测试开发自学教程-自动化平台测试开发- Python 测试开发实战
  3. php和python写爬虫-python和php哪个更适合写爬虫
  4. python基础语法第10关作业-【python基础语法】第8天作业练习题
  5. python自学需要多久-自学Python多久能找到工作
  6. python切片语法-Python字符串切片操作知识详解
  7. python软件是免费的吗-python软件都是免费的吗
  8. LeetCode Partition Equal Subset Sum(动态规划)
  9. 小米抢购限流峰值系统架构历年演进历程
  10. nginx的启动初始化过程(一)