题目

这个提示一个简单的最短路计数,除了用数组存上最短路的个数的做法以外,还有可以在得出最短路之后,搜索加剪枝的方法来通过该题。

可以反向搜索用A*的方法来通过,但是这个题的去重十分的恶心,需要一些玄学操作。

\(Code\)

// luogu-judger-enable-o2
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstdlib>
using namespace std;
struct cym {
int to, len, nex;
}e[6000010], ed[6000010]; int lin[100100], lind[100100], vis[100100], dis[100100], dist[100100], map[2010][2010], n, m, minn = 2147483647, ans, cnt;
inline void add(int f, int t, int l)
{
e[++cnt].to = t;
e[cnt].len = l;
e[cnt].nex = lin[f];
lin[f] = cnt;
ed[cnt].to = f;
ed[cnt].len = l;
ed[cnt].nex = lind[t];
lind[t] = cnt;
}
void dfs(int now, int sum)
{
if (now == n && sum == minn)
{
ans++;
return;
}
if (now == n || dist[now] + sum > minn)
return;
if (sum >= minn) return;
for (int i = lin[now]; i; i = e[i].nex)
{
dfs(e[i].to, sum + e[i].len);
}
}
inline void spfa()
{
queue <int> q;
for (int i = 2; i <= n; i++)
dis[i] = 2147483647;
dis[1] = 0;
q.push(1);
while (!q.empty())
{
int cur = q.front();
q.pop(), vis[cur] = 0;
for (int i = lin[cur]; i; i = e[i].nex)
{
int to = e[i].to;
if (dis[cur] + e[i].len < dis[to])
{
dis[to] = dis[cur] + e[i].len;
if (!vis[to])
vis[to] = 1, q.push(to);
}
}
}
}
inline void spfad()
{
memset(vis, 0, sizeof(vis));
queue <int> q;
for (int i = 1; i <= n; i++)
dist[i] = 2147483647;
dist[n] = 0;
q.push(n);
while (!q.empty())
{
int cur = q.front();
q.pop(), vis[cur] = 0;
for (int i = lind[cur]; i; i = ed[i].nex)
{
int to = ed[i].to;
if (dist[cur] + ed[i].len < dist[to])
{
dist[to] = dist[cur] + ed[i].len;
if (!vis[to])
vis[to] = 1, q.push(to);
}
}
}
}
int main()
{
// freopen("hh.txt", "r", stdin);
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; i++)
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if (map[a][b] == 0)
map[a][b] = 214746;
if (map[a][b] <= c) continue;
add(a, b, c);
map[a][b] = c;
}
spfa();
spfad();
/*for (int i = 1; i <= n; i++)
{
printf("%d ", dist[i]);
}
return 0;*/
minn = dis[n];
dfs(1, 0);
if (m == 0 || minn == 2147483647)
printf("No answer"), exit(0);
printf("%d %d", minn, ans);
}

洛谷P1608路径统计的更多相关文章

  1. 洛谷——P1608 路径统计

    P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...

  2. 洛谷 P1608 路径统计

    P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...

  3. 洛谷P1608 路径计数

    题目简介 题目描述 给你一个N点M边的有向图,求第一个点到第n个点的最短路和最短路条数 题目分析 很明显直接Dijkstra求最短路,加一个最短路计数 如下: if(dis[y]>dis[x]+ ...

  4. [洛谷U40581]树上统计treecnt

    [洛谷U40581]树上统计treecnt 题目大意: 给定一棵\(n(n\le10^5)\)个点的树. 定义\(Tree[l,r]\)表示为了使得\(l\sim r\)号点两两连通,最少需要选择的边 ...

  5. 【luogu P1608 路径统计】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1608 补上一发最短路计数! 感谢王强qwqqqq @Lance1ot #include <queue& ...

  6. luogu P1608 路径统计

    题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方,而且他们目前处在标注为 ...

  7. 洛谷——P1176 路径计数2

    P1176 路径计数2 题目描述 一个N \times NN×N的网格,你一开始在(1,1)(1,1),即左上角.每次只能移动到下方相邻的格子或者右方相邻的格子,问到达(N,N)(N,N),即右下角有 ...

  8. 洛谷 P1176 路径计数2

    P1176 路径计数2 题目描述 一个N×N的网格,你一开始在(1, 1),即左上角.每次只能移动到下方相邻的格子或者右方相邻的格子,问到达(N, N),即右下角有多少种方法. 但是这个问题太简单了, ...

  9. 洛谷——P1179 数字统计

    https://www.luogu.org/problem/show?pid=1179 题目描述 请统计某个给定范围[L, R]的所有整数中,数字 2 出现的次数. 比如给定范围[2, 22],数字 ...

随机推荐

  1. (简单)华为荣耀4A SCL-TL00的usb调试模式在哪里打开的方法

    就在我们使用PC通过数据线连接上安卓手机的时候,如果手机没有开启Usb调试模式,PC则没办法成功检测到我们的手机,有时候,我们使用的一些功能强大的App好比之前我们使用的一个App引号精灵,老版本就需 ...

  2. 总结XSS与CSRF两种跨站攻击

    XSS:跨站脚本(Cross-site scripting),实际应是"CSS",但由于和层叠样式表CSS名称冲突,故改为"XSS" CSRF:跨站请求伪造(C ...

  3. SQL 百万级数据提高查询速度的方法

    ----------------[转] 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描.2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 ...

  4. AES 加密与解密

    using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Securit ...

  5. codeforces#410C Mike and gcd problem

    题目:Mike and gcd problem 题意:给一个序列a1到an ,如果gcd(a1,a2,...an)≠1,给一种操作,可以使ai和ai+1分别变为(ai+ai+1)和(ai-ai+1); ...

  6. Postman安装与使用

    Postman一款非常流行的API调试工具.其实,开发人员用的更多.因为测试人员做接口测试会有更多选择,例如Jmeter.soapUI等.不过,对于开发过程中去调试接口,Postman确实足够的简单方 ...

  7. 用Angular部署Cesium

    用到的集成开发环境是WebStrom,Cesium版本是1.50.0,Angular版本是6.2.4  1.首先我们安装cesium,在webstorm中的Termianl中输入 npm instal ...

  8. mysql的函数与储存过程与pymysql的配合使用

    现在mysql上定义一个函数,一个储存过程 函数: delimiter \\ CREATE FUNCTION f2 ( num2 INT, num1 INT ) RETURNS INT BEGIN D ...

  9. 先vue-cli,再nuxt试试路由

    https://segmentfault.com/a/1190000007933349

  10. web框架开发-Django的Forms组件

    校验字段功能 针对一个实例:用户注册. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_length=32) ...