题解 luogu P1144 【最短路计数】
本蒟蒻也来发一次题解第一篇请见谅
这个题有几个要点
1.无向无权图,建图的时候别忘记建来回的有向边【因此WA掉1次
2.无权嘛,那么边长建成1就好了2333333
3.最短路采用迪杰斯特拉(别忘用堆优化)来做,计数操作改装进去,ans[1]=1;迪杰斯特拉更新边长的时候如果大于号(具体见代码)就覆盖,相等的话就加上
4.%楼上SPFA,BFS大佬
具体见代码,其实就是在迪杰斯特拉里面填了几笔(逃
代码巨丑(捂脸)
#include<cstdio>
#include<cstring>
#include<queue>
#define maxn 1000006
using namespace std;
int n,m,s=1;
int dis[maxn];
int ans[maxn];
struct Edge{
int t,nxt,w;
}edge[maxn*4];
int book[maxn];
int head[maxn],tot=0;
priority_queue< pair<int,int> > hep;
void add(int st,int to,int we){
edge[tot].t=to;
edge[tot].nxt=head[st];
edge[tot].w=we;
head[st]=tot;
tot++;
}
void init(){
scanf("%d %d",&n,&m);
memset(book,0,sizeof(book));
memset(head,-1,sizeof(head));
memset(dis,0x3f,sizeof(dis));
memset(ans,0,sizeof(ans));
for(int i=1;i<=m;i++){
int a,b;
scanf("%d %d",&a,&b);
add(a,b,1);
add(b,a,1);
}
dis[s]=0;
ans[s]=1;
return;
}
void dij(){
hep.push(make_pair(0-dis[s],s));
while(!hep.empty()){
int np=hep.top().second;hep.pop();
if(book[np]) continue;
book[np]=1;
for(int i=head[np];i!=-1;i=edge[i].nxt){
int w=edge[i].w;
int t=edge[i].t;
if(dis[t]>dis[np]+w){
dis[t]=dis[np]+w;
ans[t]=ans[np];
hep.push(make_pair(0-dis[t],t));
}
else if(dis[t]==dis[np]+w){
ans[t]+=ans[np];
ans[t]%=100003;
}
}
}
for(int i=1;i<=n;i++)
printf("%d\n",ans[i]);
return;
}
int main(){
init();
dij();
return 0;
}
题解 luogu P1144 【最短路计数】的更多相关文章
- 解题报告:luogu P1144 最短路计数
题目链接:P1144 最短路计数 很简单的一道\(dfs\),然而我又跑了一遍\(dij\)和排序,时间复杂度是\(O(nlog n)\) 注意:\(1\).搜索时向\(dis[j]=dis[cur] ...
- Luogu P1144 最短路计数 【最短路】 By cellur925
题目传送门 常规的最短路计数问题:注意有重边(重边不用理,看样例),自环(读入时过滤). 另外这个无向图没有权,其实可以直接bfs做,但考虑到以后带权的情况,按spfa走了. 水题被卡了三次(嘤嘤嘤 ...
- 【luogu P1144 最短路计数】 题解
题目链接:https://www.luogu.org/problemnew/show/P1144 #include <iostream> #include <cstdio> # ...
- [Luogu P1144]最短路计数
emmmm这个题看起来非常复杂,实际上仔细一分析发现到一个点最短路的个数就是所有前驱最短路个数之和.如果在图上表示也就是以1为根的bfs搜索树,一个点的最短路个数等于每一个能够向它扩展的所有点的最短路 ...
- 洛谷 P1144 最短路计数 题解
P1144 最短路计数 题目描述 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点\(1\)开始,到其他每个点的最短路有几条. 输入格式 第一行包含\(2\)个正 ...
- 洛谷——P1144 最短路计数
P1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶 ...
- P1144 最短路计数
P1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶 ...
- 洛谷 P1144 最短路计数 解题报告
P1144 最短路计数 题目描述 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 第一行包含2个正 ...
- P1144 最短路计数 题解 最短路应用题
题目链接:https://www.luogu.org/problem/P1144 其实这道题目是最短路的变形题,因为数据范围 \(N \le 10^6, M \le 2 \times 10^6\) , ...
- 洛谷P1144最短路计数题解
最短路计数 此题还是寻找从1到i点总共有几个最短路且每条边的边长为1,对于这种寻找最短路的个数,我们可以反向搜索,即先用\(SPFA\)预处理出所有点的最短路,然后我们反向记忆化搜索,可以用\(sum ...
随机推荐
- type的解释
在jquery-19.1.1源码中,type,检查对象的类型是:Boolean/Number/String/Function/Array/Date/RegExp/Object/Error中的一种,返回 ...
- php 二维数组按照某个键排序
$date = array_column($arr, 'run_date'); //上面得到的结果:array(0=>'2017-11-21',1=>'2017-11-20',3=> ...
- iosApp上传app遇到的问题
昨天上传了两个app,是由原来的app改版之后产生了新的app上传的,出现了几个问题现在记录一下. 1.证书配置问题:报错如下 解决办法:选择一个team即可.选择完team之后还是报错: 解决方法: ...
- cdnbest里站点域名不同步到节点,报400错误的一般原因
报400错误一般是站点里的域名没有同步到节点上面的原因,产生的原因一般是下面两点原因: 1.检查节点列表如下图所示的状态是否打钩,这是节点和主控的通信状态,打叉表示连接有问题 这里打叉的几种原因(1) ...
- python虚拟环境的搭建
使用python虚拟环境作用是项目与项目之间相互隔离,互相不受影响,比如当需要同时部署A.B两个项目时,A项目依赖C库的1.0版本,B项目依赖C库的2.0版本,假如不使用虚拟环境隔离A项目和B项目就很 ...
- 突然发现用PHP做多条件模糊查询很简单
原文:http://blog.csdn.net/suleil1/article/details/49471099 所使用的方法:$sqlArr=array();array_push();implode ...
- c# NPOI 导出EXCEL (在下方显示图片)
需要引入dll文件 也可以在NuGet里面管理(推荐) 比较方便 . using System; using System.Collections.Generic; using System.Linq ...
- 回忆Partition算法及利用Partition进行快排
一.Partiton算法 Partiton算法的主要内容就是随机选出一个数,将这个数作为中间数,将大于它的排在它右边,小于的排在左边(无序的). int partition (int arr[],in ...
- [Java核心技术笔记]并发
Runnable Runnable接口是函数式接口 //Runnable接口 public interface Runnable { void run(); } //用lambda表达式创建实例 Ru ...
- Springboot08-项目单元测试(接口测试)
Springboot08-项目单元测试(接口测试) 前言 1-本文重点在于源码层面,分析Springboot单元测试的使用,对于其中的注解.方法等,不会仔细分析: 2-本文项目实例相关配置:Java- ...