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 值从小到大枚举各点加入树有多少种方案,最后根据乘法原理把各个点的方案数乘起来就是 ...
随机推荐
- ArrayList哪种循环效率更好你真的清楚吗
ArrayList简介 声明:以下内容都是基于jdk1.8的 ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了 ...
- 手写简易版RPC框架基于Socket
什么是RPC框架? RPC就是远程调用过程,实现各个服务间的通信,像调用本地服务一样. RPC有什么优点? - 提高服务的拓展性,解耦.- 开发人员可以针对模块开发,互不影响.- 提升系统的可维护性及 ...
- 单细胞分析实录(8): 展示marker基因的4种图形(一)
今天的内容讲讲单细胞文章中经常出现的展示细胞marker的图:tsne/umap图.热图.堆叠小提琴图.气泡图,每个图我都会用两种方法绘制. 使用的数据来自文献:Single-cell transcr ...
- 风炫安全WEB安全学习第二十一节课 存储型XSS讲解
风炫安全WEB安全学习第二十一节课 存储型XSS讲解 存储型XSS演示 存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存 ...
- Oracle 模糊查询 优化
模糊查询是数据库查询中经常用到的,一般常用的格式如下: (1)字段 like '%关键字%' 字段包含"关键字"的记录 即使在目标字段建立索引也不会走索引,速度最慢 (2 ...
- Nginx解决前端访问资源跨域问题
被前端跨域问题折磨快2天后,终于用ngnx的方式解决了,所以在此总结下. 该篇只探讨如何用Ngnx解决跨域问题,对于原理不作讨论. 1.首先介绍Windows环境下Nignx的相关命令操作 nginx ...
- 阿里面试:MySQL如何设计索引更高效?
有情怀,有干货,微信搜索[三太子敖丙]关注这个不一样的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系列文章. ...
- netty核心组件之channel、handler、ChannelHandlerContext、pipeline
channel介绍: netty中channel分为NioServerScoketChannel和NioSocketChannel,分别对应java nio中的ServerScoketChannel和 ...
- WPF TreeView Indent 减少节点的缩进
www.swack.cn - 原文链接:WPF TreeView Indent 减少节点的缩进 问题 最近一个需求,需要在界面中实现Windows资源管理器TreeView的界面.但是我发现,我做出的 ...
- Java 设置Excel条件格式(高亮条件值、应用单元格值/公式/数据条等类型)
概述 在Excel中,应用条件格式功能可以在很大程度上改进表格的设计和可读性,用户可以指定单个或者多个单元格区域应用一种或者多种条件格式.本篇文章,将通过Java程序示例介绍条件格式的设置方法,设置条 ...