T57274 黑暗城堡
传送门
思路:
先求出各个点到 1 的最短路径。分别用两个数组将最短路径记录下来(一个要用来排序)。按排序后的 dis 值从小到大枚举各点加入树有多少种方案,最后根据乘法原理把各个点的方案数乘起来就是答案。(实现起来会比较繁琐)
Code:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<set>
#include<cstring>
#include<string>
#include<deque>
#include<map>
#include<cmath>
#include<stack>
#include<vector>
#include<queue>
#include<cstdlib>
using namespace std;
#define lck_max(a,b) ((a)>(b)?(a):(b))
#define lck_min(a,b) ((a)<(b)?(a):(b))
typedef long long LL;
const int maxn=1e6+;
const int INF=1e9+;
const LL mod=(1LL<<)-;
inline LL read()
{
LL kr=,xs=;
char ls;
ls=getchar();
while(!isdigit(ls))
{
if(!(ls^))
kr=-;
ls=getchar();
}
while(isdigit(ls))
{
xs=(xs<<)+(xs<<)+(ls^);
ls=getchar();
}
return xs*kr;
}
inline void out(LL xs)
{
if(!xs) {putchar(); return;}
if(xs<) putchar('-'),xs=-xs;
int kr[],ls=;
while(xs) kr[++ls]=xs%,xs/=;
while(ls) putchar(kr[ls]+),ls--;
}
inline LL ksc(LL x,LL y)
{
LL tmp=(x*y-(LL)((long double)x/mod*y+1.0e-8)*mod);
return tmp< ? tmp+mod : tmp;
}
LL n,m,ans=,cnt,head[maxn<<],f[maxn<<],dis[maxn];
bool vis[maxn<<];
priority_queue<pair<LL,LL>,vector<pair<LL,LL> >,greater<pair<LL,LL> > > q;
struct node
{
LL nex,to,w;
}t[maxn<<];
struct hh
{
LL dis,num;
}T[maxn<<];
inline bool cmp(const hh&x,const hh&y)
{
return x.dis<y.dis;
}
inline void add(LL nex,LL to,LL w)
{
t[++cnt].nex=head[nex];
t[cnt].to=to;
t[cnt].w=w;
head[nex]=cnt;
}
inline void dijkstra(LL s)
{
for (LL i=;i<=n;i++) T[i].dis=INF;
T[].dis=;
q.push(make_pair(T[].dis,s));
while(!q.empty())
{
LL u=q.top().second; q.pop();
if(vis[u]) continue; vis[u]=true;
for(LL i=head[u];i;i=t[i].nex)
{
LL v=t[i].to,w=t[i].w;
if (T[v].dis>T[u].dis+w) {T[v].dis=T[u].dis+w;q.push(make_pair(T[v].dis,v));}
}
}
}
inline void dfs()
{
memset(vis,false,sizeof(vis));
vis[]=true;
for(LL i=;i<=n;i++)
{
LL u=T[i].num;vis[u]=true;
for(LL j=head[u];j;j=t[j].nex)
{
LL v=t[j].to;
if(vis[v]&&dis[v]+t[j].w==T[i].dis) f[i]++;
}
}
}
LL x,y,z;
int main()
{
n=read();m=read();
for (LL i=;i<=m;i++)
x=read(),y=read(),z=read(),add(x,y,z),add(y,x,z);
dijkstra();
for (LL i=;i<=n;i++) T[i].num=i,dis[i]=T[i].dis;
std::sort(T+,T+n+,cmp);
dfs();
for(LL i=;i<=n;i++) ans=ksc(ans,f[i]);
out(ans),putchar('\n');
}
T57274 黑暗城堡的更多相关文章
- LOJ#10064. 「一本通 3.1 例 1」黑暗城堡
LOJ#10064. 「一本通 3.1 例 1」黑暗城堡 题目描述 你知道黑暗城堡有$N$个房间,$M$条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设$D_i$为如果 ...
- 【loj10064】黑暗城堡
#10064. 「一本通 3.1 例 1」黑暗城堡 内存限制:512 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 上传者: 1bentong 提交 ...
- [LOJ#10064]黑暗城堡
Description 在顺利攻破 Lord lsp 的防线之后,lqr 一行人来到了 Lord lsp 的城堡下方.Lord lsp 黑化之后虽然拥有了强大的超能力,能够用意念力制造建筑物,但是智商 ...
- 一本通 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 ...
- loj黑暗城堡
黑暗城堡 题目描述 你知道黑暗城堡有\(N\)个房间,M 条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设\(D_i\)为如果所有的通道都被修建,第i号房间与第1号房间 ...
- LOJ10064黑暗城堡
题目描述你知道黑暗城堡有 N 个房间,M 条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设 Di 为如果所有的通道都被修建,第 i 号房间与第 1 号房间的最短路径长 ...
- CH6202 黑暗城堡
一道最短路+生成树 原题链接 实际上就是生成树的中每个点到节点\(1\)的距离等于原图中这个点到节点\(1\)的最短距离,求这样的生成树的棵数. 先用\(SPFA\)或\(Dijkstra\)求出所有 ...
随机推荐
- hightopo学习之旅一 -- 节点动画
参照官网 动画手册 1.引入所需HT文件 <script src="plugins/ht/core/ht.js"></script> <script ...
- TestFlight 测试
问题1:iOS提交TestFlight测试显示缺少合规证明 解决:有的时候testFlight会显示@“缺少合规证明” 最简单的解决办法就是点击文字前边的黄色标识符,会询问你是否加密,选择相应选项就可 ...
- 发布到FaceBook试玩广告,FaceBook要求要一个Html文件
Facebook 试玩广告具体要求: 试玩广告参数是创建试玩广告素材时要满足的要求. 试玩素材应为 HTML5 格式. 试玩广告素材不应使用 mraid.js 格式. 包含所有素材的试玩广告的单个 H ...
- des加密算法java&c#
项目中用到的数据加密方式是ECB模式的DES加密得到的十六进制字符串.技术支持让写一个.net版的加密算法.这里做一下记录. java版: 16进制使用的是bouncycastle. import c ...
- Docker容器中安装vim
我在docker中安装了jexus.使用vim编辑default配置文件的时候提示 vim: command not found 原因是docker中没有安装vim命令 如果你直接输入 apt-ge ...
- docker容器的实践——综合项目一
Docker 综合实验 实验拓扑: [调度器] Keepalived + nginx 一.Keepalived服务的安装配置: 关闭LVS服务器的ipv4代理和 ...
- Java面试宝典(2018版)
置顶 2018年11月10日 23:49:18 我要取一个响亮的昵称 阅读数:8893 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chen ...
- linux 命令 创建 Django 项目 使用路由返回首页界面
1.安装mysql数据库 2.安装pymysql.pip3 install pymysql 3.首先使用cd 命令进入创建的项目文件夹 4.使用django-admin startproject we ...
- asp.net core mvc 在中间件中使用依赖注入问题:System.InvalidOperationException: Cannot resolve scoped service 'IXXXService' from root provider.
今天在弄JWT的时候需要用到用户验证使用一个自己写好的验证,但在出现了:System.InvalidOperationException: Cannot resolve scoped service ...
- hdu4779 组合计数+dp
提交 题意:给了n*m的网格,然后有p个重型的防御塔,能承受1次攻击,q个轻型防御塔不能接受任何攻击,然后每个防御搭会攻击他所在的行和所在的列,最后求在这个网格上放至少一个防御塔的方案数, 我们枚举 ...