博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3114 Tarjan+Dijkstra
阅读量:5026 次
发布时间:2019-06-12

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

题意:

间谍在战争期间想要传递一份谍报回国,谍报可以在邮局之间传递,但这种传递是单向的,并且会少耗一些时间。但是如果两个邮局在同一个国家的话,那么谍报在这两个邮局之间传递是不消耗时间的。如果几个邮局发出的谍报可以通过一些路径相互到达,那么这些邮局就属于一个国家。那么问题来了:给出一个起点和终点,问最快什么时候能够将谍报传递到。
思路:
先Tarjan缩点,然后跑Dijkstra(Floyd可能会被卡,但是貌似有个哥们【现在应该叫前辈了】多交了几次,卡1000ms过了)(也可以记忆化搜索,spfa什么的 看个人喜好吧…)

#include 
#include
#include
#include
#include
using namespace std;int dfn[505],low[505],p[505],map[505][505],MAP[505][505],W[505],n,m,t,cnt;bool vis[505],VIS[505];vector
v[505];stack
stk;void tarjan(int x){ vis[x]=1;stk.push(x);low[x]=dfn[x]=++cnt; for(int i=0;i
W[j]&&!VIS[j]) minn=W[j],k=j; VIS[k]=1; for(int j=1;j<=t;j++) if(!VIS[j]&&W[j]>W[k]+MAP[k][j]) W[j]=W[k]+MAP[k][j]; } return W[end]<0x3ffffff?W[end]:-1;}int main(){ while(scanf("%d%d",&n,&m)&&n) { cnt=t=0; memset(map,0x3f,sizeof(map)); memset(MAP,0x3f,sizeof(MAP)); memset(dfn,0,sizeof(dfn)); memset(vis,0,sizeof(vis)); memset(p,0,sizeof(p)); for(int i=1;i<=n;i++)v[i].clear(); for(int i=1;i<=n;i++)map[i][i]=MAP[i][i]=0; for(int i=1;i<=m;i++) { register int xx,yy,weight; scanf("%d%d%d",&xx,&yy,&weight); v[xx].push_back(yy); if(weight

就是这位前辈,卡1000ms过的。。

这里写图片描述
Dijkstra还是快点儿的。
这里写图片描述

转载于:https://www.cnblogs.com/SiriusRen/p/6532483.html

你可能感兴趣的文章
Android读取url图片保存及文件读取
查看>>
完整ASP.Net Excel导入
查看>>
判断CPU大小端示例代码
查看>>
ARTS打卡第13周
查看>>
循环队列的运用---求K阶斐波那契序列
查看>>
pta 编程题14 Huffman Codes
查看>>
初始化bootstrap treeview树节点
查看>>
python selenium向<sapn>标签中写入内容
查看>>
JS常用坐标
查看>>
使用”结构化的思考方式“来编码和使用”流程化的思考方式“来编码,孰优孰劣?...
查看>>
C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)【转】...
查看>>
关于git的认证方式
查看>>
字符串按照字典序排列
查看>>
IOS 开发调用打电话,发短信
查看>>
CI 框架中的日志处理 以及 404异常处理
查看>>
keepalived介绍
查看>>
css3 标签 background-size
查看>>
python itertools
查看>>
Linux内核调试技术——jprobe使用与实现
查看>>
样式、格式布局
查看>>