CH6202·黑暗城堡
初见安~这里是一个我没用过的网站的和bzoj的入门OJ的传送门:CH6202 & 入门OJ P4928
Description
在顺利攻破 Lord lsp 的防线之后,lqr 一行人来到了 Lord lsp 的城堡下方。Lord lsp 黑化之后虽然拥有了强
大的超能力,能够用意念力制造建筑物,但是智商水平却没怎么增加。现在 lqr 已经搞清楚黑暗城堡有 N 个房间
,M 条可以制造的双向通道,以及每条通道的长度。lqr 深知 Lord lsp 的想法,为了避免每次都要琢磨两个房间
之间的最短路径, Lord lsp一定会把城堡修建成树形的;但是,为了尽量提高自己的移动效率,Lord lsp 一定会
使得城堡满足下面的条件:设 Di为如果所有的通道都被修建,第 i 号房间与第 1 号房间的最短路径长度;而 Si
为实际修建的树形城堡中第 i 号房间与第1 号房间的路径长度,对于所有满足 1≤i≤N 的整数 i,有 Si = Di
。为了打败 Lord lsp,lqr想知道有多少种不同的城堡修建方案。于是 lqr 向 applepi 提出了这个问题。由于 a
pplepi 还要忙着出模拟赛,所以这个任务就交给你了。当然,你只需要输出答案对 2^31 – 1 取模之后的结果就
行了.
Input
第一行有两个整数 N 和 M。
之后 M 行,每行三个整数 X,Y 和 L,表示可以修建 X 和 Y 之间的一条长度为 L 的通道。
2≤N≤1000,N – 1≤M≤N(N – 1)/2,1≤L≤100
Output
输出一个整数,表示答案对 2^31 – 1 取模之后的结果。
Sample Input
3 3
1 2 2
1 3 1
2 3 1
Sample Output
2
Sol
这是一个最短路径树的典例之一。题意很明确——问你有多少条棵短路径树。【注意,不是多少条最短路,和最短路计数是不一样的
虽然看起来n比较大,但是是单源的所以不用担心复杂度会爆掉。求一遍最短路,然后枚举每个点以及连出去的边,看看有多少条到达这个点的路径长度是等于最短路径的。最后累乘起来就行了。
可以直接看代码的:)
#include<bits/stdc++.h>
#define maxn 1005
#define maxm 500005
#define INF 2147483647
using namespace std;
int read()
{int x = 0, ch = getchar();while(!isdigit(ch)) ch = getchar();while(isdigit(ch)) x = (x << 1) + (x << 3) + ch - '0', ch = getchar();return x;
}int n, m;
long long ans = 1;
struct edge
{int to, w, nxt;edge() {}edge(int tt, int ww, int nn) {to = tt, w = ww, nxt = nn;}
}e[maxm << 1];int head[maxn], k = 0;
void add(int u, int v, int w)
{e[k] = edge(v, w, head[u]);head[u] = k++;
}int dis[maxn];
bool vis[maxn];
void dij()//Dijkstra堆优化求最短路
{memset(dis, 0x3f, sizeof dis);priority_queue<pair<int, int > > q;q.push(make_pair(0, 1)); dis[1] = 0;while(q.size()){register int u = q.top().second, v, w; q.pop();if(vis[u]) continue;vis[u] = 1;for(int i = head[u]; ~i; i = e[i].nxt){v = e[i].to, w = e[i].w;if(dis[u] + w >= dis[v]) continue;dis[v] = dis[u] + w;q.push(make_pair(-dis[v], v));}}
}int cnt[maxn];
int main()
{memset(head, -1, sizeof head);n = read(), m = read();register int u, v, w;for(int i = 1; i <= m; i++)u = read(), v = read(), w = read(), add(u, v, w), add(v, u, w);dij();for(int i = 1; i <= n; i++){for(int j = head[i]; ~j; j = e[j].nxt)//枚举点和扩散出去的边{v = e[j].to, w = e[j].w;if(dis[v] == dis[i] + w) cnt[v]++;//注意cnt一定要开一个数组,因为是用i去更新v}}for(int i = 1; i <= n; i++)if(cnt[i]) ans = ans * cnt[i] % INF;//注意要取模printf("%lld\n", ans);return 0;
}
有点暴力呀……但是还是可以180+ms完美通过的~
超级开心,因为是自己写出来然后一遍过的>w<
迎评:)
——End——
CH6202·黑暗城堡相关推荐
- 信息奥赛一本通1486: CH 6202 黑暗城堡 最短路径生成树计数
1486:黑暗城堡 [题目描述] 知道黑暗城堡有 N 个房间,M 条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设 Di为如果所有的通道都被修建,第 i 号房间与第 1 ...
- SPFA算法+例题 :问题 A: 黑暗城堡
SPFA算法 算法思想: 1) 三角形中的性质:同一三角形内两边之和大于第三边. 2)由上面那一条性质,我们可以想出一个方法来更新源点到其他点的最短的路径:用中间节点k松弛u->k->v, ...
- 一本通 P1486 【黑暗城堡】
题库 :一本通 题号 :1486 题目 :黑暗城堡 link :http://ybt.ssoier.cn:8088/problem_show.php?pid=1486 思路 :这道题既然要求使加入生成 ...
- 黑暗城堡 最短路径生成树
dark♂城堡(233 题目描述 一个图,有n个节点,m条带权值无向边,构造一颗生成树,使得树上的点到根(1)的距离为该点到1的最短距离.输出符合条件的生成树的个数 答案模取\(2^{31}-1\) ...
- 黑暗城堡-(最小生成树+最短路)
咕咕咕 prim的特点是从一个点开始,不断把距离最短的点加入图中,在以此延伸.是一种贪心的想法.当知道prim的特点的时候,就可以想到这题用prim. 这题又要求实际路径=最短路径,,也可以想到用di ...
- LOJ:黑暗城堡(最短路)
题目描述 求一个图关于1的最小路径树的方案数 解析 想复杂了qwq 跑dij的时候如果dis[now]+w==dis[to],就使cnt[to]++ 如果更新dis,cnt赋值成1 最后乘起来即可 本 ...
- acwing349 黑暗城堡 ——最短路径生成树
Link 思路 最短路径生成树计数 代码 // // #include <bits/stdc++.h> using namespace std; //#define mp make_pai ...
- 《算法进阶指南》最小生成树剩余题目
CH6201 走廊泼水节 CH6202 黑暗城堡 转载于:https://www.cnblogs.com/LLbinGG/p/9910965.html
- OI每周刷题记录——lrllrl
看这标题就知道我是模仿的hzwer大佬,远程%%% 大佬的OI经历让蒟蒻我深受感触,为了晚一些AFO本蒟蒻也得加油了 从高二上期第一周开始计数,每个星期天更一次,一直更到我AFO 如果这是我此生最后一 ...
- sol - 0x60,61,62
[例题]走廊泼水节 设当前扫描到边x,y,长度为z,x所处的并查集为Sx,y所处的并查集为Sy: 对于任意u属于Sx,v属于Sy,我们可以知道u,v之间必连一条边 但是我们要在保证x,y之间的边属于唯 ...
最新文章
- Mybatis最入门---代码自动生成(generatorConfig.xml配置)
- Leetcode--1160.拼写单词(Java)
- python每日一题公众号_python每日一题总结4
- Base Filtering Engine 拒绝访问解法
- 字符串处理 百度之星资格赛 1002 列变位法解密
- 深度学习代码实战——基于RNN的手写数字分类
- upc 7833 生日蛋糕
- 【MPI学习4】MPI并行程序设计模式:非阻塞通信MPI程序设计
- MySQL error(2006) server has gone away
- python数据包pandas_python | 数据分析(二)- Pandas数据包
- IOS 开发环境,证书和授权文件是什么?
- 小米手机定价与《怪诞行为学》
- MSDC 4.3 接口规范(18)
- APP-Log日志采集
- JavaScript - 从身份证号中获取生日
- 全能UI设计师到底需要具备哪些能力呢?
- Android-69-音视频开发:AnyChat for Android SDK
- 按分类搜索淘宝直播接口API,淘宝直播API接口
- 【厚积薄发系列】C++项目总结9—ZeroMQ消息队列入门及分布式系统中应用(一)
- 实现同网段不同vlan通信有几种方式?纯二层网络下又是如何实现的?
热门文章
- 关于用ADS设计PA中电容的选择
- canvas入门教学(5)运动小球屏保特效与下雪特效渲染
- python实用教程答案 郑阿奇_VisualC++实用教程第4版_郑阿奇,习题参考答案,精品资料...
- 南通大学计算机学院本科考研,南通大学各学院2021考研分数线已公布
- mysql的封锁协议_【眼见为实】数据库并发问题 封锁协议 隔离级别
- 吐血整理C++书单,萌新到大牛,要看哪些书?
- ONE readme study
- 天才作文-不知道有没有人发过 很有才
- python flv转mp4_ffmpeg将多个flv文件合成为mp4(golang版)
- vue引用echarts柱形加折线统计图(周月年动态切换数据)