【JZOJ6354】最短路(tiring)
时间:2019-09-13
本文章向大家介绍【JZOJ6354】最短路(tiring),主要包括【JZOJ6354】最短路(tiring)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
description
analysis
显然边权有变化规律\(x,{1\over{x-1}},{x-1\over x},x,...\)
于是把一个点拆成三个点,分别表示步数到除\(3\)余\(0,1,2\)的最小值
拆边的话应该也可以,然后跑最短路
我™这辈子都不会再想打SBFA
code
#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<queue>
#define db double
#define MAXN 600005
#define MAXM MAXN*4
#define INF 19260817e20
#define reg register int
#define fo(i,a,b) for (reg i=a;i<=b;++i)
#define fd(i,a,b) for (reg i=a;i>=b;--i)
#define rep(i,a) for (reg i=last[a];i;i=next[i])
using namespace std;
int last[MAXM],next[MAXM],tov[MAXM];
db len[MAXM],dis[MAXN],ans=INF;
bool bz[MAXN];
int n,m,tot;
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}
while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline db min(db x,db y){return x<y?x:y;}
inline void link(int x,int y,db z){next[++tot]=last[x],last[x]=tot,tov[tot]=y,len[tot]=z;}
struct node
{
int x;db y;
bool operator <(const node &a)const{return a.y<y;}
};
priority_queue<node>q;
inline void dijkstra()
{
while (!q.empty())q.pop();
memset(dis,100,sizeof(dis));
memset(bz,0,sizeof(bz));
q.push((node){3,dis[3]=0});
while (!q.empty())
{
node now=q.top();q.pop();
if (bz[now.x])continue;bz[now.x]=1;
rep(i,now.x)if (dis[now.x]+len[i]<dis[tov[i]])
{dis[tov[i]]=dis[now.x]+len[i];if (!bz[tov[i]])q.push((node){tov[i],dis[tov[i]]});}
}
ans=min(dis[3*n],min(dis[3*n+1],dis[3*n+2]));
}
int main()
{
freopen("T2.in","r",stdin);
//freopen("tiring.in","r",stdin);
//freopen("tiring.out","w",stdout);
n=read(),m=read();
fo(i,1,m)
{
int x=read(),y=read(),z=read();
link(3*x,3*y+1,1.0*z),link(3*x+1,3*y+2,1.0/(z-1.0)),link(3*x+2,3*y,1.0*(z-1)/z),
link(3*y,3*x+1,1.0*z),link(3*y+1,3*x+2,1.0/(z-1.0)),link(3*y+2,3*x,1.0*(z-1)/z);
}
dijkstra();
if (ans>1e15)printf("chu ti ren shi zhi zhang\n");
else printf("%.3lf\n",ans);
return 0;
}
原文地址:https://www.cnblogs.com/horizonwd/p/11516767.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python -二叉树 创建与遍历算法(很详细,转自国外教程)
- APP流量来源追踪方式——Android篇
- 从浏览器输入网址回车到看到页面过程到底经历了什么?
- Flutter Bloc 官方文档(BlocBuilder翻译)
- OpenGL ES 3.0 | 统一变量和属性的概念与(在程序中的)获取流程、统一变量缓冲区对象详解、std140块规范、用 命名统一变量块 建立 统一变量缓冲区对象 的流程 和 相关API 和...
- 深入浅出SVM(PART III)
- 高频原题——LeetCode题目8:字符串转换整数 (atoi)
- 不转字符串判断——LeetCode题目9:回文数
- 关于双指针的简单理解
- 面试题噩梦之一——LeetCode题目10:正则表达式匹配
- 什么时候触发GC
- 找找数学上的规律——LeetCode题目11:盛最多水的容器
- Java学习笔记, 不断更新
- 这题真是送分——LeetCode题目12:整数转罗马数字
- 该了解一波了!零基础入门Nginx