loj黑暗城堡
黑暗城堡
题目描述
你知道黑暗城堡有\(N\)个房间,M 条可以制造的双向通道,以及每条通道的长度。
城堡是树形的并且满足下面的条件:
设\(D_i\)为如果所有的通道都被修建,第i号房间与第1号房间的最短路径长度;
而\(S_i\)为实际修建的树形城堡中第i号房间与第1号房间的路径长度;
要求对于所有整数\(i(1<= i <= N)\),有\(S_i = D_i\)成立。
你想知道有多少种不同的城堡修建方案。当然,你只需要输出答案对\(2 ^ {31} - 1\)取模之后的结果就行了。
输入格式
第一行为两个由空格隔开的整数 ;
第二行到第n + 1行为3个由空格隔开的整数x,y,l:表示x号房间与y号房间之间的通道长度为l。
输出格式
一个整数:不同的城堡修建方案数对\(2 ^ {31} - 1\)取模之后的结果。
题解:首先dij,求出1号点到其他点的最短距离。
然后扫描所有边,如果dis[v]==dis[u]+e[i].w,说明让v点的距离为给最短距离的路径又多了一条,所以,cnt[v]++;
最终结果就是所有点的cnt[]相乘。
#include <cstdio>
#include <iostream>
#include <queue>
#define orz cout << "AK IOI"
using namespace std;
const int maxn = 1010;
const int maxm = 500010;
const int mod = 2e31 - 1;
inline int read()
{
	int x = 0, f = 1;
	char ch = getchar();
	while (ch < '0' || ch > '9') {if(ch == '-') f = -1; ch = getchar();}
	while (ch >= '0' && ch <= '9') {x = x * 10 + ch - '0';ch = getchar();}
	return x * f;
}
int n, m, dis[maxn], vis[maxn], cnt[maxn];
long long ans = 1;
struct edge{
	int u, v, w, nxt;
}e[maxm << 1];
int head[maxn], js;
void add(int u, int v, int w)
{
	e[++js].u = u;
	e[js].v = v;
	e[js].w = w;
	e[js].nxt = head[u];
	head[u] = js;
}
struct node{
	int w, now;
	bool operator < (const node &x)const
	{
		return w > x.w;
	}
};
priority_queue<node> q;
void dijkstra(int s)
{
	for(int i = 1; i <= n; i++)
	dis[i] = 0x7fffffff;
	dis[s] = 0;
	q.push((node{0, s}));
	while(!q.empty())
	{
		node t = q.top();
		q.pop();
		int u = t.now;
		if(vis[u]) continue;
		vis[u] = 1;
		for(int i = head[u]; i; i = e[i].nxt)
	    {
	    	int v = e[i].v;
	    	if(dis[v] > dis[u] + e[i].w)
	    	{
	    		dis[v] = dis[u] + e[i].w;
				q.push((node{dis[v], v}));
			}
		}
	}
}
int main()
{
    n = read(), m = read();
    for(int i = 1; i <= m; i++)
    {
    	int u = read(), v = read(), w = read();
    	add(u, v, w);
    	add(v, u, w);
	}
	dijkstra(1);
	/*for(int i = 1; i <= n; i++)
	printf("%d ",dis[i]);*/
	for(int i = 1; i <= n; i++)
	   for(int j = head[i]; j; j = e[j].nxt)
	   {
	   	  int v = e[j].v;
	  	  if(dis[v] == dis[i] + e[j].w)
		  cnt[v]++;
	   }
	for(int i = 2; i <= n; i++)
	ans = ans * cnt[i] % mod;
	printf("%lld",ans);
	return 0;
}
												
											loj黑暗城堡的更多相关文章
- LOJ#10064. 「一本通 3.1 例 1」黑暗城堡
		
LOJ#10064. 「一本通 3.1 例 1」黑暗城堡 题目描述 你知道黑暗城堡有$N$个房间,$M$条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设$D_i$为如果 ...
 - [LOJ#10064]黑暗城堡
		
Description 在顺利攻破 Lord lsp 的防线之后,lqr 一行人来到了 Lord lsp 的城堡下方.Lord lsp 黑化之后虽然拥有了强大的超能力,能够用意念力制造建筑物,但是智商 ...
 - 【loj10064】黑暗城堡
		
#10064. 「一本通 3.1 例 1」黑暗城堡 内存限制:512 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 上传者: 1bentong 提交 ...
 - 一本通 P1486 【黑暗城堡】
		
题库 :一本通 题号 :1486 题目 :黑暗城堡 link :http://ybt.ssoier.cn:8088/problem_show.php?pid=1486 思路 :这道题既然要求使加入生成 ...
 - 「CH6202」黑暗城堡
		
「CH6202」黑暗城堡 传送门 这道题是要让我们求以点 \(1\) 为源点的最短路树的方案数. 我们先跑一遍最短路,然后考虑类似 \(\text{Prim}\) 的过程. 当我们把点 \(x\) 加 ...
 - 信息奥赛一本通1486: CH 6202 黑暗城堡 最短路径生成树计数
		
1486:黑暗城堡 [题目描述] 知道黑暗城堡有 N 个房间,M 条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设 Di为如果所有的通道都被修建,第 i 号房间与第 1 ...
 - LOJ10064黑暗城堡
		
题目描述你知道黑暗城堡有 N 个房间,M 条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设 Di 为如果所有的通道都被修建,第 i 号房间与第 1 号房间的最短路径长 ...
 - 【LOJ#10064】黑暗城堡
		
题目大意:定义一个无向图的最短路径生成树如下:在该无向图的生成树中,任意一个节点到根节点的距离均等于根节点到该节点的最短路.求有多少种最短路径生成树. 题解:首先跑一遍 dij 求出从根节点到每个节点 ...
 - T57274 黑暗城堡
		
传送门 思路: 先求出各个点到 1 的最短路径.分别用两个数组将最短路径记录下来(一个要用来排序).按排序后的 dis 值从小到大枚举各点加入树有多少种方案,最后根据乘法原理把各个点的方案数乘起来就是 ...
 
随机推荐
- [leetcode]54. Spiral Matrix2生成螺旋数组
			
import java.util.Arrays; /** * Created by lvhao on 2017/7/6. * Given an integer n, generate a square ...
 - eclipse下如何查看Android源码
			
1.查看安卓源代码: (1)首先要先下载安装源代码,网上有很多地方都可以下,百度"安卓源代码下载就行了",这里要注意版本,比如我这里用的是4.0.3的版本,对应的是android- ...
 - Turtlebot3新手教程:OpenCR软件设置(shell)
			
*本文针对如何利用脚本来更新固件进行讲解 具体步骤如下: burger的固件更新 $ export OPENCR_PORT=/dev/ttyACM0 $ export OPENCR_MODEL=bur ...
 - (转) 增加 header 参数,spring boot + swagger2(springfox)
			
1 @Configuration 2 @EnableSwagger2 3 public class Swagger2 { 4 @Bean 5 public Docket createRestApi() ...
 - 阿里云centos7安装mysql8数据库
			
一.安装mysql 1. mysql官网查找仓库源镜像,选择downloads https://www.mysql.com/downloads/ 2. 找到社区版 3. 选择yum仓库 4. 选择对应 ...
 - 孟德尔随机化(Mendelian Randomization) 统计功效(power)和样本量计算
			
孟德尔随机化(Mendelian Randomization) 统计功效(power)和样本量计算 1 统计功效(power)概念 统计功效(power)指的是在原假设为假的情况下,接受备择假设的概率 ...
 - NOIP初赛篇——05计算机语言
			
程序  程序就是一系列的操作步骤,计算机程序就是由人实现规定的计算机完成某项工作的操作步骤.每一步骤的具体内容能够理解的指令来描述,这些指令告诉计算机"做什么"和"怎么 ...
 - WPF 调试时拖拽不生效
			
WPF窗体代码 <Window x:Class="SerialLabelDemo.Test.Window10" xmlns="http://schemas.micr ...
 - 【Flutter】可滚动组件之CustomScrollView
			
前言 CustomScrollView是可以使用Sliver来自定义滚动模型(效果)的组件.它可以包含多种滚动模型,举个例子,假设有一个页面,顶部需要一个GridView,底部需要一个ListView ...
 - 肌肤管家SkinRun V3S智能皮肤检测仪,用AI探索肌肤问题
			
继肌肤管家SkinRun V3皮肤检测仪之后,肌肤管家SkinRun近期又一重磅推出的肌肤管家SkinRun V3S 智能肌肤测试仪引起了美业人的广泛关注.据了解它汇集百万皮肤数据,利用五光谱原理和人 ...