dijkstral改编
题意:给你包含n个点的连通图,每个点都有一个权值。给定起点和终点。问你起点到终点的最短路条数,并且输出路径最短且权值之和最大的一条路径。
思路:1.如何根据父节点更新子节点。x,y是父子节点。如果从起点s到父节点x的最短路条数为cnt,则从起点到y的最短路条数也为cnt。如果更新某个点最短路条数的时候,发现这个点原来的最短路条数相同的话就要,再原来最短路条数的基础上再加上这次最短路的条数。
2.如何更新从起点到某个点的权值路径的权值之和:如果从起点到父节点x的权值之和为w,则从起点到y的权值之和为w加上y节点的自身的权值之和。
3.L2第一题和L2 26题有一些相同的之处,都是由父节点更新子节点。比如26题父节点的辈分如果是2则子节点的辈分就是在2+1.下面上第一题代码。
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<stack>
- #include<cmath>
- #define inf 0x3f3f3f3f
- using namespace std;
- int f[],ans[];//ans数组记录起点到每个点得救援队数量
- int w[],a[][];
- int v[],d[],fa[];//fa数组记录父亲节点
- stack<int> s;
- int N,M,S,D,k=;
- void dijkstra()
- {
- memset(d,0x3f,sizeof d);
- memset(v,,sizeof v);
- d[S]=;
- f[S]=;
- ans[S]=w[S];
- for(int i=;i<N;i++)
- {
- int x,m=inf;
- for(int j=;j<N;j++)
- {
- if(!v[j]&&d[j]<m)
- {
- m=d[j];
- x=j;
- }
- }
- v[x]=;
- for(int y=;y<N;y++)
- {
- if(d[y]>d[x]+a[x][y])
- {
- f[y]=f[x];//最短路条数
- d[y]=d[x]+a[x][y];
- fa[y]=x;
- ans[y]=ans[x]+w[y];
- }
- else if(d[y]==d[x]+a[x][y])
- {
- f[y]+=f[x];
- if(ans[y]<ans[x]+w[y])
- {
- fa[y]=x;
- ans[y]=ans[x]+w[y];
- }
- }
- }
- }
- }
- int main()
- {
- scanf("%d%d%d%d",&N,&M,&S,&D);
- for(int i=;i<N;i++)
- {
- scanf("%d",&w[i]);
- }
- memset(a,0x3f,sizeof a);
- for(int i=;i<;i++)
- fa[i]=-;
- int x,y,z;
- for(int i=;i<M;i++)
- {
- cin>>x>>y>>z;
- a[x][y]=z;
- a[y][x]=z;
- dijkstra();
- printf("%d %d\n",f[D],ans[D]);
- s.push(D);
- for(int i=fa[D];i!=-;i=fa[i])
- {
- s.push(i);
- }
- printf("%d",s.top());
- s.pop();
- while(!s.empty())
- {
- printf(" %d",s.top());
- s.pop();
- }
- return ;
- }
dijkstral改编的更多相关文章
- 【转】监听按钮除OnClick外其他事件的方法,附简易改编的UIButton类
http://lib.csdn.net/article/unity3d/38463 作者:IceFantasyLcj 大家好,我是雨中祈雨.一直以来,CSDN都是我最好的编程助手.这是我在CSDN的第 ...
- 【转】 NGUI 监听按钮除OnClick外其他事件的方法,附简易改编的UIButton类
http://blog.csdn.net/icefantasylcj/article/details/49450555 大家好,我是雨中祈雨.一直以来,CSDN都是我最好的编程助手.这是我在CSDN的 ...
- NOIP2014无线网络发射器选址改编1
问题描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129条东西向街道和129条南北向街道所形成的网格状,并且相邻的平 ...
- APK改之理 手游修改改编安卓程序工具安装使用教程
APK改之理 手游修改改编安卓程序工具安装使用教程 --APK破解付费程序 apk改之理是pc平台上一款非常好用的apk反编译工具,他将反编译以及签名等功能集中在一起,并且拥有非常人性化的操作界面,如 ...
- C语言 · 8皇后问题改编
8皇后问题(改编) 问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8的棋盘. 输出格式 所能得到的最大数字和 样例输入 1 2 3 4 5 ...
- luogu p3371 单源最短路径(dijkstral
本来我写的对的 我就多手写了个 ios::sync_with_stdio(false); 我程序里面用了cin 还有scanf 本来想偷偷懒 我就说 我查了半天错 根本找不到的啊... 后来交了几次 ...
- 2017Facebook面试题改编“一面砖墙 ”
题目:一面砖墙 这道题改编自网上Facebook去年的一道面试题,是hihoCoder的1494题(https://hihocoder.com/problemset/problem/1494) 这道题 ...
- Atcoder Regular Contest 092 A 的改编
原题地址 题目大意 给定平面上的 $n$ 个点 $p_1, \dots, p_n$ .第 $i$ 点的坐标为 $(x_i, y_i)$ .$x_i$ 各不相同,$y_i$ 也各不相同.若两点 $p_i ...
- Cocos2d-x 3.1 一步一步地做改编
本文并不想谈论的屏幕改编或真理的概念.假设不知道cocos2d-x的,请先看这篇文章:http://www.cocoachina.com/gamedev/cocos/2014/0516/8451.ht ...
随机推荐
- HTML中的清除浮动的常用方法(转载)
以下面的div为例: HTML: <div class="test"> <div class="test1"></div> ...
- C++ 中文拼音排序方法。
参考文档:http://zisxks.com/2013/10/25/sort-Chinese-characters-in-cpp/ 采用locate.注意事项:排序的名字,如果出现某一个人,出现在顶上 ...
- elk-(七)
最终架构确定为 logs--->blieb--->redis/kafka--->logstash--->es--->kibana 注意: geoip下载地址: wge ...
- vue2.0 源码解读(一)
又看完一遍中文社区的教程接下来开始做vue2.0的源码解读了! 注:解读源码时一定要配合vue2.0的生命周期和API文档一起看 vue2.0的生命周期分为4主要个过程 create. 创建---实例 ...
- Mybatis连接配置文件详解
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC &q ...
- windows环境下MySQL mysql-5.7.17-winx64 (社区服务版,community server)安装教程
根据网上查询的资料显示,MySQ在版本5.7开始根目录下没有dada目录,需要额外的“初始化数据库”的操作自动生成data目录. 1. 下载地址: https://cdn.mysql.com// ...
- SQL Server 索引自动组织维护
公司的一个产品中的数据库,几个热点表因为主键和索引设计不合理,造成索引碎片过大,影响性能. 我尝试新建了一个索引碎片整理的定时任务,用于维护索引锁片和统计信息. 具体的过程如下: 本文原创,转发请表明 ...
- XSS笔记
XSS测试代码: <img src="javascript:alert(/xss/)"> <script src=http://evil.com/xss.js&g ...
- Grafana 安装及 Windows 应用程序服务配置工具 NSSM使用
网址:https://blog.csdn.net/kk185800961/article/details/83515382 1.进入conf文件,将 defaults.ini 复制一份,命名为cust ...
- java框架之Spring(2)-注解配置IOC&AOP配置
注解配置IoC 准备 1.要使用注解方式配置 IoC,除了之前引入的基础 jar 包,还需要引入 spring-aop 支持包,如下: 2.在 applicationContext.xml 中引入 c ...