最小最短路径树。

\(dis[j]==dis[i]+w(i,j)\)时,从\(w(i,j')\)和\(w(i,j)\)考虑。——从0分到100分。

#include <bits/stdc++.h>
const int maxn = 10000;
const int maxm = 100000; using namespace std; int to[maxm * 2 + 10];
int w[maxm * 2 + 10];
int nex[maxm * 2 + 10];
int head[maxn + 10], cnt = 0; void addEdge(int a, int b, int c)
{
to[cnt] = b; w[cnt] = c;
nex[cnt] = head[a]; head[a] = cnt++;
to[cnt] = a; w[cnt] = c;
nex[cnt] = head[b]; head[b] = cnt++;
} int edgeVis[maxm + 10];
int dotVis[maxn + 10];
int dis[maxn + 10];
int edgePre[maxn + 10]; void spfa()
{
memset(edgeVis, 0, sizeof(edgeVis));
memset(dotVis, 0, sizeof(dotVis));
memset(dis, 0x3f, sizeof(dis));
memset(edgePre, -1, sizeof(edgePre));
queue<int> q;
dis[1] = 0;
q.push(1);
dotVis[1] = 1;
while (!q.empty())
{
int x = q.front(); q.pop();
dotVis[x] = 0;
for (int i = head[x]; i != -1; i = nex[i])
{
int l = to[i];
if (dis[l] > dis[x] + w[i])
{
dis[l] = dis[x] + w[i];
if (edgePre[l] != -1)
edgeVis[edgePre[l]] = 0;
edgePre[l] = i / 2;
edgeVis[edgePre[l]] = 1;
if (!dotVis[l])
{
q.push(l);
dotVis[l] = 1;
}
}
else if (dis[l] == dis[x] + w[i])
{
if (w[edgePre[l] * 2] > w[i])
{
edgeVis[edgePre[l]] = 0;
edgePre[l] = i / 2;
edgeVis[edgePre[l]] = 1;
}
}
}
}
} int main()
{
int n, m;
scanf("%d%d", &n, &m); memset(head, -1, sizeof(head));
for (int i = 1, a, b, c; i <= m; i++)
{
scanf("%d%d%d", &a, &b, &c);
addEdge(a, b, c);
} spfa(); int ans = 0;
for (int i = 0; i <= cnt - 1; i += 2)
{
if (edgeVis[i / 2])
{
ans += w[i];
}
} printf("%d\n", ans); return 0;
}

最新文章

  1. AC自动机-算法详解
  2. java树形目录展示
  3. 【JAVA集合框架之工具类】
  4. iOS static
  5. Unity3D之Mecanim动画系统学习笔记(七):IK(反向动力学)动画
  6. NGUI系列教程八(监听NGUI的事件方法)
  7. 【转】用串口登录Beaglebone Black、用usb共享电脑网络、内核模块的本地编译
  8. hdu2937
  9. window.setTimeout()函数的使用
  10. IoC和DI的基本概念的思维导图
  11. xargs处理来之STDIN的输入
  12. Angular.js实现分页
  13. .net 高级写法总结
  14. V4L2编程 视频采集-范例
  15. 微信小游戏 egret.getDefinitionByName获取不到
  16. [实战]MVC5+EF6+MySql企业网盘实战(5)——ajax方式注册
  17. 如果修改GeneXus Android的一些源码文件(FlexibleClient)
  18. STL不同容器的使用方法
  19. NOIP2014飞扬的小鸟
  20. [Android Studio Problems]记录克隆项目中遇到的坑(问题)以及解决方法

热门文章

  1. Flex利用JavaScript执行cmd命令
  2. OpenStack集成ceph
  3. HTML、CSS基础知识
  4. Nginx-(四)基本模块2
  5. vue中插槽的使用场景
  6. Spring-boot(一)通过向导快速创建Spring-boot项目
  7. JDK动态代理和CGLIB字节码增强
  8. Spring Boot中使用Jpa的findOne方法不能传入id
  9. ASP.NET Core3.X 终端中间件转换为端点路由运行
  10. 有奖投票丨HC2019开发者关注的TOP10问题你最想听哪个?