#10064. 「一本通 3.1 例 1」黑暗城堡

这篇具有很好参考价值的文章主要介绍了#10064. 「一本通 3.1 例 1」黑暗城堡。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目

题目描述

你知道黑暗城堡有 N 个房间,M 条可以制造的双向通道,以及每条通道的长度。
城堡是树形的并且满足下面的条件:
D i D_i Di 为如果所有的通道都被修建,第 i 号房间与第 1 号房间的最短路径长度;
S i S_i Si 为实际修建的树形城堡中第 i 号房间与第 1 号房间的路径长度;
要求对于所有整数 i ( 1 ≤ i ≤ N 1\le i\le N 1iN),有 S i = D i S_i= D_i Si=Di 成立。
你想知道有多少种不同的城堡修建方案。当然,你只需要输出答案对 2 31 − 1 2^{31} -1 2311 取模之后的结果就行了。

输入格式

第一行为两个由空格隔开的整数 N, M;
第二行到第 M+1 行为 3 个由空格隔开的整数 x, y, l:表示 x 号房间与 y 号房间之间的通道长度为 l。

输出格式

一个整数:不同的城堡修建方案数对 2 31 − 1 2^{31} -1 2311 取模之后的结果。

样例

输入

4 6
1 2 1
1 3 2
1 4 3
2 3 1
2 4 2
3 4 1

输出

6

代码详解

思路

Dijsktra求最短路,由乘法原理可得ACcode文章来源地址https://www.toymoban.com/news/detail-558301.html

ACcode

#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
const int maxn=1005;
const int mod=(1<<31)-1;
int w[maxn][maxn],dis[maxn];
bool vis[maxn];
int n,m;
long long sum;
void Dij(){
	dis[1]=0;
	for(int i=1;i<=n;i++){
		int e=0;
		for(int j=1;j<=n;j++){ if(!vis[j]&&(!e||dis[j]<=dis[e])) e=j; }
		vis[e]=1;
		for(int j=1;j<=n;j++){ if(!vis[j]) dis[j]=min(dis[j],dis[e]+w[e][j]); }
	}
}
int main(){
	memset(dis,INF,sizeof(dis));
	memset(w,INF,sizeof(w));
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v,ww;
		cin>>u>>v>>ww;
		w[u][v]=w[v][u]=ww;
	}
	Dij();
	sum=1;
	int ans;
	for(int i=2;i<=n;i++){
		ans=0;
		for(int j=1;j<=n;j++) if(dis[i]==dis[j]+w[j][i]&&dis[i]!=INF) ans++;
		sum=sum*ans%mod;
	}
	cout<<sum;
	return 0;
}

到了这里,关于#10064. 「一本通 3.1 例 1」黑暗城堡的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实验六 基于 Dijsktra 算法的最短路径求解

    实验六 基于Dijsktra算法的最短路径求解 一、实验目的 1.掌握图的邻接矩阵表示法,掌握采用邻接矩阵表示法创建图的算法。 2.掌握求解最短路径的 Dijsktra 算法。 二、实验内容 一张地图包括 n 个城市,假设城市间有 m 条路径(有向图),每条路径的长度 已知。给定地图的一个起

    2024年01月18日
    浏览(57)
  • 【3.1数据库系统】数据库体系结构

    ①.外模式: 外模式面向具体的应用程序,定义在逻辑模式之上,但独立于存储模式和存储设备。 ②.概念模式(模式): 用于描述数据库的逻辑结构。 ③.内模式: 也称为存储模式或物理模式,是数据库内部的一种表示方式,用于描述数据物理结构和存储结构。 ①. 基本关

    2024年01月23日
    浏览(52)
  • 数据密集型应用系统设计--3.1 数据库核心:数据结构

    3.1 数据库核心:数据结构 数据库只需做两件事情:向它插入数据肘,它就保存数据:之后查询时,它应该返回那些数据。 本章我们主要从数据库的角度再来探讨同样的问题,即如何存储输入的数据,井在收到查询请求时,怎样重新找到数据. 了解存储引擎的底层机制。 存储

    2024年01月24日
    浏览(48)
  • 【Algorithms 4】算法(第4版)学习笔记 08 - 3.1 符号表

    本文的主要内容是 符号表 (symbol table,以下简称 ST)。内容比较简单,只涉及到比较基础的实现,没有太过复杂的概念,因而篇幅比较短。 在 Sedgewick 教授的视频课程中对一些数学模型分析内容没有进行详细的证明,但在书中有比较详细的介绍,可以参考书中的相关章节进

    2024年02月20日
    浏览(36)
  • 文心一言 VS chatgpt (12)-- 算法导论3.1 6~7题

    文心一言: chatgpt: 要证明「一个算法的运行时间为θ(g(n))当且仅当其最坏情况运行时间为O(g(n)),且其最好情况运行时间为Ω(g(n))」,需要证明两个方向: 如果算法的运行时间为θ(g(n)),则它的最坏情况运行时间为O(g(n)),且最好情况运行时间为Ω(g(n))。 如果算法的最坏情况运

    2024年02月01日
    浏览(37)
  • 文心一言 VS chatgpt (10)-- 算法导论 3.1 2~3题

    文心一言: 设a=b,则有(n+a) ^ b=(n+b)(n+a)=n ^ b+n ^ b =O(n ^ b) 因此,对任意实常量a和b,其中b0,有(n+a) ^ b=O(n ^ b)。 chatgpt: 要证明 (n+a)^b = O(n^b) ,我们需要找到一个正常量 C 和一个正整数 N ,使得对任意 n = N ,都有 (n+a)^b = C * n^b 。 考虑当 n = 1 时,有 因为 b 0 ,所以 b - 1 = 0 。因

    2024年02月12日
    浏览(31)
  • 文心一言 VS chatgpt (9)-- 算法导论2.3 7题 3.1 1题

    文心一言: 这里是一个运行时间为O(nlgn)的算法,可以用来确定集合 S 中是否存在两个元素,它们的和恰好为工。 首先,我们需要将集合 S 中的元素按升序排序,这样我们可以先找到两个元素 u 和 v,使得 u + v = w。 接下来,我们需要将这两个元素从集合 S 中删除,这样我们就

    2024年02月09日
    浏览(26)
  • 文心一言 VS chatgpt (13)-- 算法导论3.1 8题 3.2 1题

    文心一言: chatgpt: 类比于单个参数的情形,我们可以定义类似的记号: O(g(n, m)): 表示一个函数集合,其中的函数在 n 和 m 分别趋向正无穷时,上界为 g(n, m) 的某个常数倍。 Ω(g(n, m)): 表示一个函数集合,其中的函数在 n 和 m 分别趋向正无穷时,下界为 g(n, m) 的某个常数倍。

    2024年02月09日
    浏览(31)
  • 文心一言 VS chatgpt (11)-- 算法导论2.3 7题 3.1 4~5题

    文心一言: chatgpt: 第一个式子不成立,第二个式子成立。 2 ^ (n+1) = O(2 ^ n) 该式不成立。按照大O符号的定义,如果存在正常数c和n0,使得nn0时,2 (n+1)=c*2 n,则该式成立。但实际上,没有任何正常数c和n0满足该条件。因为当n趋近无穷大时,2 (n+1)与2 n的比值趋近于2,即2^(n+1

    2023年04月22日
    浏览(30)
  • 题目:2511.最多可以摧毁的敌人城堡数量

    ​ 题目来源:         leetcode题目,网址:2511. 最多可以摧毁的敌人城堡数目 - 力扣(LeetCode) 解题思路:        顺序遍历数组,记录上一个我军城堡和没有城堡的位置。当碰到空位置时,若上一次更新的值为我军城堡,记录较大的摧毁数;当碰到我军城堡时,若上一次更

    2024年02月13日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包