博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C-TT的美梦(c++
阅读量:3949 次
发布时间:2019-05-24

本文共 1850 字,大约阅读时间需要 6 分钟。

乍一看,发现自己有好几篇博客都木有写了,唉。

在这里插入图片描述
在这里插入图片描述

Input

256 7 8 9 1061 22 33 41 55 44 5245101 2 4 4 5 6 7 8 9 10101 22 33 11 44 55 66 77 88 99 1023 10

output

Case 1:
3
4
Case 2:
?
?
做法

这道题主要运用了Bellman-ford算法,和SPFA

所谓Bellman-ford算法的讲解,继续扒图
课堂上的PPT,很详细

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

所以对于本题涅

题意:图解,用测试数据第一组做例子,因为本题是有向图,所以会出现负环的问题用SPFA处理此类问题。那么本题DFS遍历路径,然后就是起点是1,从1开始,到其他的点,比如1到4,税费最少是1~2~3~4,所以是3,针对每一个点,在spfa的基础上dfs找它的路径,最后得出正确结果。

感觉我的解释好混乱,还是写一篇spfa笔记好了

在这里插入图片描述
Code

#include
#include
#include
#include
using namespace std;const int maxn=1e5;const int Inf=1e8;int T,N,M,W,P,a,b,tot,tag;//T组数据 ,N点数,M道路数,W询问个数 ,P 税费 int head[maxn],vis[maxn],dis[maxn],ary[maxn],inq[maxn],cnt[maxn];struct edge{
int to,next,w;};edge e[maxn*2];queue
Q;void add_edge(int u, int v, int w){
//链式前向星 e[++tot].to = v; e[tot].w = w; e[tot].next = head[u]; head[u] = tot;}void dfs(int lop){
//dfs递归遍历边 vis[lop]=1; for(int i=head[lop];i!=-1;i=e[i].next){
if(vis[e[i].to]==0) dfs(e[i].to); }}void spfa(){
dis[1]=0;inq[1]=1;Q.push(1);//起点 while(Q.size()){
int u=Q.front();Q.pop(); inq[u]=0; if(vis[u]) continue; for(int i=head[u];i!=-1;i=e[i].next){
int v=e[i].to; if(dis[v]>dis[u]+e[i].w){
cnt[v]=cnt[u] + 1; dis[v]=dis[u] + e[i].w; if(cnt[v]>=N) dfs(v); if(!inq[v]){
Q.push(v); inq[v]=1; } } } } }int main(){
ios::sync_with_stdio(false); cin>>T;tag=1; while(T--){
cin>>N;tot=0; //初始化 for(int i=1;i<=N;i++) dis[i]=Inf; memset(inq,0,sizeof(inq));memset(head,-1,sizeof(head)); memset(cnt,0,sizeof(cnt));memset(vis,0,sizeof(vis)); for(int i=1;i<=N;i++) cin>>ary[i]; cin>>M; for(int i=1;i<=M;i++){
cin>>a>>b; int tmp=ary[b]-ary[a]; add_edge(a,b,pow(tmp,3)); } spfa(); cin>>W; cout<<"Case "<
<<":"<
>P; if(dis[P]<3||dis[P]==Inf||vis[P]==1) cout<<"?"<

转载地址:http://udwzi.baihongyu.com/

你可能感兴趣的文章
Android开发——支付宝和微信支付快速接入流程
查看>>
NetWork——TCP的流量控制和拥塞控制
查看>>
Android开发——解决方法数越界问题
查看>>
算法相关——Java排序算法之希尔排序(五)
查看>>
算法相关——Java排序算法之选择排序(六)
查看>>
Android开发—— 热修复Tinker源码浅析
查看>>
算法相关——Java排序算法之堆排序(七)
查看>>
Android开发——Volley的使用详解
查看>>
Android开发——Volley源码解析
查看>>
算法相关——Java排序算法之归并排序(八)
查看>>
Android开发——BroadcastReceiver知识总结
查看>>
算法相关——KMP算法最通俗易懂的解释
查看>>
Android开发——监控造成UI卡顿的原因
查看>>
设计模式——设计模式三大分类以及六大原则
查看>>
Java技术——同步锁的各种知识总结
查看>>
Android开发——适配终结者AutoLayout
查看>>
Android开发——ListView局部刷新的实现
查看>>
Java技术——Java中的参数传值方式
查看>>
Android开发——本地验证码的简易实现
查看>>
Java技术——CopyOnWriteArrayList源码解析
查看>>