题目链接:黑暗城堡

思路:首先用SPFA算法求出每个点到1号点的最短距离。如果一个节点到1号节点的最短路 = 另一个和它有连边的节点到根节点的最短路 + 它们两个节点之间的直接距离,那么答案数就加一

#include<stdio.h>
#include<string.h>
#include<queue>
#include<math.h>
#include<stack>
#include<algorithm>
using namespace std;
const long long mod=pow(2,31)-1;
int inf=0x3f3f3f3f;
const int maxn=1e6+50;
long long e[1001][1001];
int n,m,num=0;
int dis[maxn];//用来记录源点到其余各个顶点的最短路径
int first[maxn],next1[maxn],book[maxn];
int v[maxn],w[maxn],u[maxn];//表示从顶点u[i]到顶点v[i]这条边的权重w[i]
struct s
{int u,v;long long w;
}s1[58862458];
void add(int a,int b,int c)//链式向前星
{v[num]=b;w[num]=c;next1[num]=first[a];first[a]=num++;} void spfa(int x)//spfa算法模板 {int i;stack<int>q;memset(dis,inf,sizeof(dis));memset(book,0,sizeof(book));dis[x]=0;book[x]=1;//book表示此点是否已是最短路q.push(x);while(!q.empty()){int u=q.top();q.pop();book[u]=0;for(i=first[u];i!=-1;i=next1[i]){if(dis[v[i]]>dis[u]+w[i]){dis[v[i]]=dis[u]+w[i];if(book[v[i]]==0){book[v[i]]=1;q.push(v[i]);}}}}}
int main()
{scanf("%d%d",&n,&m);//初始化 memset(e,inf,sizeof(e));memset(first,-1,sizeof(first));memset(next1,-1,sizeof(next1));for(int i=0;i<m;i++){//printf("****\n");scanf("%d%d%lld",&s1[i].u,&s1[i].v,&s1[i].w);//因为是无向图 add(s1[i].u,s1[i].v,s1[i].w);add(s1[i].v,s1[i].u,s1[i].w);e[s1[i].u][s1[i].v]=e[s1[i].v][s1[i].u]=min(e[s1[i].u][s1[i].v],s1[i].w);//避免出现错误 }spfa(1);long long p=1;//dis数组表示为各点到1的最短距离 for(int i=2;i<=n;i++)//1号店除外 {int sum=0;//sum为当前节点的方案数 //printf("%d\n",dis[i]);for(int j=1;j<=n;j++)//枚举 {//如果一个节点到1号节点的最短路 = 另一个和它有连边的节点到根节点的最短路 + 它们两个节点之间的直接距离,那么答案数++if(dis[i]==dis[j]+e[i][j])sum++;}if(sum)p=p*sum%mod;//边乘边取模 }printf("%lld\n",p);
}

黑暗城堡 LibreOJ - 10064(SPFA)相关推荐

  1. SPFA算法+例题 :问题 A: 黑暗城堡

    SPFA算法 算法思想: 1) 三角形中的性质:同一三角形内两边之和大于第三边. 2)由上面那一条性质,我们可以想出一个方法来更新源点到其他点的最短的路径:用中间节点k松弛u->k->v, ...

  2. 信息奥赛一本通1486: CH 6202 黑暗城堡 最短路径生成树计数

    1486:黑暗城堡 [题目描述] 知道黑暗城堡有 N 个房间,M 条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设 Di为如果所有的通道都被修建,第 i 号房间与第 1 ...

  3. 一本通 P1486 【黑暗城堡】

    题库 :一本通 题号 :1486 题目 :黑暗城堡 link :http://ybt.ssoier.cn:8088/problem_show.php?pid=1486 思路 :这道题既然要求使加入生成 ...

  4. 黑暗城堡 最短路径生成树

    dark♂城堡(233 题目描述 一个图,有n个节点,m条带权值无向边,构造一颗生成树,使得树上的点到根(1)的距离为该点到1的最短距离.输出符合条件的生成树的个数 答案模取\(2^{31}-1\) ...

  5. 黑暗城堡-(最小生成树+最短路)

    咕咕咕 prim的特点是从一个点开始,不断把距离最短的点加入图中,在以此延伸.是一种贪心的想法.当知道prim的特点的时候,就可以想到这题用prim. 这题又要求实际路径=最短路径,,也可以想到用di ...

  6. LOJ:黑暗城堡(最短路)

    题目描述 求一个图关于1的最小路径树的方案数 解析 想复杂了qwq 跑dij的时候如果dis[now]+w==dis[to],就使cnt[to]++ 如果更新dis,cnt赋值成1 最后乘起来即可 本 ...

  7. acwing349 黑暗城堡 ——最短路径生成树

    Link 思路 最短路径生成树计数 代码 // // #include <bits/stdc++.h> using namespace std; //#define mp make_pai ...

  8. 《信息学奥赛一本通》提高版题单

    第一部分 基础算法 第 1 章 贪心算法 #10000 「一本通 1.1 例 1」活动安排 #10001 「一本通 1.1 例 2」种树 #10002 「一本通 1.1 例 3」喷水装置 #10003 ...

  9. 1002 图论专练 解题报告

    T1  重量不同的硬币 有N(1 <= N <= 1,000)个硬币,编号为1..N. 给出W(1 <= W <= 3,000)个推断对(A,B),表示硬币A比硬币B重. 寻找 ...

  10. LOJ 一本通一句话题解系列:

    第一部分 基础算法 第 1 章 贪心算法 1):「一本通 1.1 例 1」活动安排:按照结束时间排序,然后扫一遍就可以了. 2):「一本通 1.1 例 2」种树:首先要尽量的往区间重叠的部分种树,先按 ...

最新文章

  1. poj 1873 枚举+凸包
  2. ubuntu下快速安装adb,fastboot的方法。
  3. service启动activity_「 Android 10 四大组件 」系列—Service 的 quot; 启动流程 quot;
  4. sp 导出unity哪个_GitHub上发现的一个导出Unity3D场景数据的工具
  5. 1.微信小程序-B站:前言准备
  6. 北美地区IPv4地址已用完,网络IP地址告急?
  7. OpenAnolis社区致Linux开发者的一封信
  8. 一个c语言源程序至少包含,一个C源程序必须包含一个main函数
  9. 萤火虫算法_一种优化方法:蜂鸟优化算法
  10. matlab 矩阵规定化,Matlab实现直方图规定化
  11. [培训-DSP快速入门-1]:DSP概述(基本框架、CPU, GPU, FPGA比较,常见型号)
  12. 引入阿里icon库的方法(font-class 引用)
  13. Echar柱状堆叠图X轴自定义显示功能
  14. word里双横线怎么打_在word中怎么画直线、双直线、虚线
  15. linux压缩超过4g的文件吗,使用tar压缩文件,不能超过4G,有什么办法解决-
  16. 【网页处理与文本分析】某电视剧弹幕信息情感分析
  17. 中国十大徒步路线,你走过几个?
  18. RAKsmart日本服务器性能怎么样?有什么优势
  19. ToDesk-----个人免费 极致流畅的远程协助软件
  20. Altium_Designer中英文技术词汇对照

热门文章

  1. 公网地址和私网地址问题
  2. 2021年数据泄露成本报告解读
  3. msvcr110.dll丢失的解决方法?有哪些修复的方法?
  4. unity VR中制作小地图的方法
  5. 聊聊2022年广告联盟行业吧
  6. 关于临时指针变量和其他临时变量的区别
  7. 黄金周未来景区游客涨6倍 阿里巴巴数字经济体引领体验式消费升级
  8. 51单片机系列——定时/计数器
  9. 基于EasyX图形库的天天爱消除
  10. javascript实现锁定网页、密码解锁效果(屏幕保护效果)