Luogu P1144 最短路计数 【最短路】 By cellur925
常规的最短路计数问题:注意有重边(重边不用理,看样例),自环(读入时过滤)。
另外这个无向图没有权,其实可以直接bfs做,但考虑到以后带权的情况,按spfa走了。
水题被卡了三次(嘤嘤嘤
第一次40pts:忘取膜了(???
第二次80pts:加了多余的判断,实质还是思路不清晰。
第三次100pts:去了冗余的判断,终于A了。
思路:
记录f数组表示f[i]为以i为终点,1为起点的最短路条数。初始只有f[1]=1。
其余在松弛的时候如果更新,f[v]=f[u];
如果恰好相等(有相同最短路径)(这种情况不能和上面的情况一起判断),就f[v]+=f[u]
Code
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
const int inf=;
int n,m,s;
int p=;
int num;
int pre[],f[];
struct node{
int to,val,next;
}edge[];
int dis[];
bool visit[];
void add(int x,int y,int z)
{
num++;
edge[num].val=z;
edge[num].to=y;
edge[num].next=pre[x];
pre[x]=num;
}
void spfa()
{
queue<int>q;
for(int i=;i<=n;i++)
dis[i]=inf;
q.push();
dis[]=;f[]=;
visit[]=;
while(!q.empty())
{
int u=q.front();
q.pop();
visit[u]=;
for(int i=pre[u];i>;i=edge[i].next)
{
int v=edge[i].to;
//if(u==1) (f[v]=1)%=p;
if(dis[v]>dis[u]+edge[i].val)
{
dis[v]=dis[u]+edge[i].val;
/*if(u!=1)*/ (f[v]=f[u])%=p;
if(visit[v]==)
{
visit[v]=;
q.push(v);
}
}
else if(dis[v]==dis[u]+edge[i].val)
(f[v]+=f[u])%=p;
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int x=,y=,z=;
scanf("%d%d",&x,&y);
if(x==y) continue;
add(x,y,);
add(y,x,);
}
spfa();
for(int i=;i<=n;i++)
printf("%d\n",f[i]);
return ;
}
* Update 2018.9.22
做NOIp2017逛公园的时候发现自己的最短路计数算法有些Bug==
导致30分没有成功拿到。
做了一道加强版的最短路计数 路径统计
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring> using namespace std;
typedef long long ll; int n,m,fake;
int vis[],dis[];
ll f[];
int e[][]; void spfa()
{
memset(dis,,sizeof(dis));
fake=dis[];
queue<int>q;
q.push();vis[]=;dis[]=;f[]=;
while(!q.empty())
{
int u=q.front();q.pop();
vis[u]=;
if(u==n) continue;
for(int i=;i<=n;i++)
{
if(dis[i]==dis[u]+e[u][i])
f[i]+=f[u];
if(dis[i]>dis[u]+e[u][i])
{
dis[i]=dis[u]+e[u][i];
f[i]=f[u];
}
if(f[i]&&!vis[i]) vis[i]=,q.push(i);
}
f[u]=;
}
} int main()
{
scanf("%d%d",&n,&m);
memset(e,,sizeof(e));
for(int i=;i<=m;i++)
{
int x=,y=,z=;
scanf("%d%d%d",&x,&y,&z);
e[x][y]=min(e[x][y],z);
}
spfa();
if(fake==dis[n]) printf("No answer");
else printf("%d %lld",dis[n],f[n]);
return ;
}
还是用这个吧qwq
Luogu P1144 最短路计数 【最短路】 By cellur925的更多相关文章
- 洛谷P1144-最短路计数-最短路变形
洛谷P1144-最短路计数 题目描述: 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点\(1\)开始,到其他每个点的最短路有几条. 思路: \(Dijkstra ...
- POJ - 3463 Sightseeing 最短路计数+次短路计数
F - Sightseeing 传送门: POJ - 3463 分析 一句话题意:给你一个有向图,可能有重边,让你求从s到t最短路的条数,如果次短路的长度比最短路的长度多1,那么在加上次短路的条数. ...
- 解题报告:luogu P1144 最短路计数
题目链接:P1144 最短路计数 很简单的一道\(dfs\),然而我又跑了一遍\(dij\)和排序,时间复杂度是\(O(nlog n)\) 注意:\(1\).搜索时向\(dis[j]=dis[cur] ...
- 【Luogu】P1144最短路计数(BFS)
题目链接 此题使用BFS记录最短路的条数.思路如下:因为是无权无向图,所以只要被BFS到就是最短路径.因此可以记录该点的最短路和最短路的条数:如果点y还没被访问过,则记录dis[y],同时令ans[y ...
- P1144 最短路计数 题解 最短路应用题
题目链接:https://www.luogu.org/problem/P1144 其实这道题目是最短路的变形题,因为数据范围 \(N \le 10^6, M \le 2 \times 10^6\) , ...
- P1144 最短路计数
P1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶 ...
- 洛谷 P1144 最短路计数 解题报告
P1144 最短路计数 题目描述 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 第一行包含2个正 ...
- 洛谷P1144 最短路计数 及其引申思考
图论题目练得比较少,发一道spfa的板子题目- 题目:P1144 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: ...
- 洛谷——P1144 最短路计数
P1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶 ...
随机推荐
- 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.0.0版)
TableGo v6.0.0 版震撼发布,此次版本更新如下: 1.UI界面大改版,组件大调整,提升界面功能的可扩展性. 2.新增BeautyEye主题,界面更加清新美观,也可以通过配置切换到原生Jav ...
- Java中Cookie常用操作类(Spring中操作Cookie)
说明:Cookie下用Key取值没有快速的方法,只能便利循环去取. 技巧:置0则cookie会立即删除,设置-1,负值则会在关闭浏览器后删除.切记一定要增加路径:setPath("/&quo ...
- [Javascript] Understanding the .constructor property on JavaScript Objects
Constructor functions hold an interesting purpose in JavaScript. Unlike in classical languages, they ...
- Office文档如何转换 PDF 转 DOC XLS
1 使用Adobe Acrobat Pro,打开任意PDF都可以转换为XLSX格式(似乎没找到XLS) 2 如果你转换之后的东西无法打开,则先转换成DOC,然后再把DOC全选复制粘贴到XLS即可 ...
- Office EXCEL 创建图片超链接打不开怎么办 Excel打开图片提示发生了意外错误怎么办
如下图所示,点击超链接提示无法打开指定的文件 如果使用Office打开,则提示发生了意外错误 你需要先把IE浏览器打开,这样就可以打开了,并非是图像的相对位置不正确导致的.
- UTF-8 GBK UTF8 GB2312之间的区别和关系
UTF-8 GBK UTF8 GB2312之间的区别和关系 UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM.是用以解决国际上字符 ...
- 【Java 虚拟机探索之路系列】:JIT编译器
作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell 为 ...
- ASP.NET没有魔法——ASP.NET MVC Razor与View渲染 ASP.NET没有魔法——ASP.NET MVC界面美化及使用Bundle完成静态资源管理
ASP.NET没有魔法——ASP.NET MVC Razor与View渲染 对于Web应用来说,它的界面是由浏览器根据HTML代码及其引用的相关资源进行渲染后展示给用户的结果,换句话说Web应用的 ...
- [Sciter] 资源引用
http://www.cnblogs.com/yinxufeng/p/fb343eecda564aa63bce0bdf15709ddf.html 方式一. 加载外部文件方式二. 加载内存方式三. 加载 ...
- 【iOS9系列】- CoreSportlight内容索引的使用
[iOS9系列]- CoreSportlight内容索引的使用 前言 在iOS9中新增加了的CoreSportlight内容索引,这个还是比较实用的,当我们的App比较多的时候,我们会实用iOS系统的 ...