Slow Path Finding Algorithm

2024-03-16 23:48
文章标签 path algorithm finding slow

本文主要是介绍Slow Path Finding Algorithm,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

题解

本题使笔者认识到了memset导致超时的痛苦。本题只需要打一个简单的最短路即可, 每次将入度为0的点加入队列,去掉与它相连的边,并更新最小值,记住别打memset,这道题专门卡memset。

源码

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<set>
#define MAXM 200005
#define MAXN 100005
using namespace std;
int t,n,m,pre[MAXN][30];
int to[MAXM],nxt[MAXM];
int cp[MAXM];
int head[MAXN],tot;
int degin[MAXN],degout[MAXN];
int dis[MAXN][30],pat[MAXN][30];
bool used[MAXM];
bool cir;
priority_queue<int> q; 
void read(int &x)
{int f=1;x=0;char s=getchar();while(s>'9'||s<'0'){if(s=='-') f=-1;s=getchar();}while(s>='0'&&s<='9'){x=(x<<3)+(x<<1)+(s^48);s=getchar();}x*=f;} 
void addEdge(int u,int v,char ch)
{to[++tot]=v;cp[tot]=ch-'a';nxt[tot]=head[u];head[u]=tot;used[tot]=false;
}
int main()
{freopen("spfa.in","r",stdin);freopen("spfa.out","w",stdout);read(t);while(t--){tot=0;//memset(to,0,sizeof(to));//memset(nxt,0,sizeof(nxt));//memset(head,0,sizeof(head));//memset(degin,0,sizeof(degin));//memset(degout,0,sizeof(degout));//memset(cp,0,sizeof(cp));//memset(pre,0,sizeof(pre));read(n);read(m);for(int i=1;i<=n;i++)head[i]=degin[i]=degout[i]=0;for(int i=1;i<=m;i++){int u,v;char c;read(u);read(v);scanf("%c",&c);degin[v]++;degout[u]++;addEdge(v,u,c);}//memset(used,false,sizeof(used));//memset(dis,0,sizeof(dis));//memset(pat,0,sizeof(pat));for(int i=1;i<=n;i++){ if(!degout[i])q.push(i);for(int j=0;j<26;j++)pat[i][j]=1,pre[i][j]=dis[i][j]=0;} cir=false;int maxx=-1,k1=0,k2=0;while(!q.empty()){int t=q.top();q.pop();for(int i=head[t];i;i=nxt[i]){int v=to[i];if(used[i]||!degout[v]){cir=true;break;}used[i]=true;degout[v]--;if(!degout[v]) q.push(v);for(int j=0;j<26;j++)if(dis[t][j]>dis[v][j]){dis[v][j]=dis[t][j];pat[v][j]=pat[t][j]+1;pre[v][j]=t;}if(dis[t][cp[i]]+1>dis[v][cp[i]]){dis[v][cp[i]]=dis[t][cp[i]]+1;pat[v][cp[i]]=pat[t][cp[i]]+1;pre[v][cp[i]]=t;}}if(cir) break; }if(cir){puts("-1");continue;}for(int i=1;i<=n;i++){if(degout[i]){cir=true;break;}if(degin[i]) continue;for(int j=0;j<26;j++)if(dis[i][j]>maxx){maxx=dis[i][j];k1=i,k2=j;}}if(cir){puts("-1");continue;}printf("%d %c %d\n",maxx,k2+'a',pat[k1][k2]);int ii=k1;while(ii){printf("%d ",ii);ii=pre[ii][k2];}puts("");}return 0;
}

谢谢!!!

这篇关于Slow Path Finding Algorithm的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/817140

相关文章

Flask 创建app 时候传入的 static_folder 和 static_url_path参数理解

Flask 在创建app的时候 是用 app = Flask(__name__) 来创建的,不传入 static_folder参数的话 ,默认的静态文件的位置是在 static目录下 我们可以进入 Flask的源码里面查看 ctrl+鼠标左键进入 这是Flask的 __init__源码(后面还有一些,我就选了需要的代码)     def __init__(self,import_

(4)SVG-path中的椭圆弧A(绝对)或a(相对)

1、概念 表示经过起始点(即上一条命令的结束点),到结束点之间画一段椭圆弧 2、7个参数 rx,ry,x-axis-rotation,large-arc-flag,sweep-flag,x,y (1)和(2)rx,ry rx:椭圆的x轴半径(即水平半径) ry:椭圆的y轴半径(即垂直半径) 这两个参数好理解,就是椭圆的两条对称轴半径,相等即为圆 也可以写比例,写比例时默认用符合条件

【tensorflow 使用错误】tensorflow2.0 过程中出现 Error : Failed to get convolution algorithm

如果在使用 tensorflow 过程中出现 Error : Failed to get convolution algorithm ,这是因为显卡内存被耗尽了。 解决办法: 在代码的开头加入如下两句,动态分配显存 physical_device = tf.config.experimental.list_physical_devices("GPU")tf.config.experiment

【ArcGIS Pro实操第二期】最小成本路径(Least-cost path)原理及实操案例

ArcGIS Pro实操第一期:最小成本路径原理及实操案例 概述(Creating the least-cost path)1.1 原理介绍1.2 实现步骤1.3 应用案例 2 GIS实操2.1 工具箱简介2.1.1 成本路径(Cost path)2.1.2 成本距离(Cost distance)2.1.2 路径距离(Path Distance) 2.2 案例: 参考 概述(Cre

大数据Java基础-JAVA IO 9】java IO流 (九) Path、Paths、Files的使用

1.NIO的使用说明: >Java NIO (New IO,Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API,可以替代标准的Java IO AP。 >NIO与原来的IO同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的(IO是面向流的)、基于通道的IO操作。 >NIO将以更加高效的方式进行文件的读写操作。 >随着 JDK 7 的发布,Java对N

最短路径(Shortest Path)

单源最短路径问题 Dijkstra算法:基于递推的思想设计 未达顶点的最短路径一定是由已到达顶点的最短路径求出 所有顶点之间的最短路径,任意两个顶点之间的最短路径 Floyd算法:只是Dijkstra最短路径算法的加强,其本质还是递推

【ArcGIS Pro实操第一期】最小成本路径(Least-cost path)原理及实操案例

ArcGIS Pro实操第一期:最小成本路径原理及实操案例 概述(Creating the least-cost path)1.1 原理介绍1.2 实现步骤1.3 应用案例 2 GIS实操2.1 工具箱简介2.1.1 成本路径(Cost path)2.1.2 成本距离(Cost distance)2.1.2 路径距离(Path Distance) 2.2 案例: 参考 概述(Cre

[LeetCode] 64. Minimum Path Sum

题:https://leetcode.com/problems/minimum-path-sum/description/ 题目 Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers

[LeetCode] 687. Longest Univalue Path

题:https://leetcode.com/problems/longest-univalue-path/description/ 题目 Given a binary tree, find the length of the longest path where each node in the path has the same value. This path may or may no

C#从入门到精通(22)—Path类的使用

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家!人工智能学习网站 前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在开发上位机软件的过程中,有时候需要对文件的路径、文件名、扩展名进行操作,下面进行详细介绍: 1、合并路径 将盘符、文件夹、文件进行合并成最全的文件路径 st