当前位置: 首页 > news >正文

SPOJ - CHICAGO 106 miles to Chicago(乘积最短路)

题意:

给一个无向图,边权代表安全通过的百分比值,求从点1到点n的最大安全百分比。

思路:

可以知道从一点到另一点的安全百分比是其经过的所有边权的乘积,所以需要对各个边权log一下,最终再取e^dis[n]就是答案。所以问题就转化为了求点1到点n的最长路。

代码:

#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;
const int maxn = 105;
const int maxm = maxn*maxn;
struct node {
	int v;
	double w;
	bool operator<(const node k) const {
		return w < k.w;
	}
};
struct node1{double w; int v, next;} edge[maxm];
int no, head[maxn];
double dis[maxn];
bool vis[maxn];
priority_queue<node> q;
int n, m;
void init()
{
	no = 0;
	memset(head, -1, sizeof head);
}
inline void add(int u, int v, double w)
{
	edge[no].v = v, edge[no].w = w;
	edge[no].next = head[u]; head[u] = no++;
}
void work()
{
	fill(dis, dis+n+1, -inf);
	memset(vis, 0, sizeof vis);
	while(!q.empty()) q.pop();
	dis[1] = 0;
	q.push((node){1, 0});
	while(!q.empty())
	{
		node tp = q.top(); q.pop();
		int u = tp.v;
		if(vis[u]) continue;
		vis[u] = 1;
		for(int k = head[u]; k+1; k = edge[k].next)
		{
			int v = edge[k].v;
			if(dis[v] < dis[u]+edge[k].w)
			{
				dis[v] = dis[u]+edge[k].w;
				q.push((node){v, dis[v]});
			}
		}
	}
	printf("%.6f percent\n", exp(dis[n])*100+eps);
}
int main()
{
	while(scanf("%d", &n) && n && scanf("%d", &m))
	{
		init();
		for(int i = 1; i <= m; ++i)
		{
			int u, v, w;
			scanf("%d %d %d", &u, &v, &w);
			add(u, v, log(w/100.0));
			add(v, u, log(w/100.0));
		}
		work();
	}
	return 0;
} 


继续加油~

相关文章:

  • HTML5之FileReader的使用
  • LeetCode 202 Happy Number(floyd判圈算法(龟兔赛跑算法))
  • css3 中text-align:justify
  • HDU-1503 Advanced Fruits(LCS)
  • LightOJ-1253 Misere Nim(Nim求解不正常的博弈)
  • python发送电子邮件模块smtplib
  • uva-1349 Optimal Bus Route Design(最小费用最大流)
  • 一个简单的通用验证类的实现
  • ZOJ-3987 Numbers 2017CCPC秦皇岛站G题 (二进制乱搞、贪心)
  • iOS开发-类簇(Class Cluster)
  • HDU-1350 Taxi Cab Scheme(最小路径覆盖)
  • codeforces-884D Boxes And Balls(思维、三叉哈夫曼树)
  • 设置c++程序的堆栈空间解决栈溢出问题
  • POJ-1932 XYZZY(判正权环路+Warlshell传递闭包)
  • Codeforces 827C DNA Evolution(多维树状数组)
  • dva中组件的懒加载
  • FastReport在线报表设计器工作原理
  • HTTP请求重发
  • js 实现textarea输入字数提示
  • Redis在Web项目中的应用与实践
  • Vue 动态创建 component
  • WePY 在小程序性能调优上做出的探究
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 一些css基础学习笔记
  • 智能合约开发环境搭建及Hello World合约
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (第一天)包装对象、作用域、创建对象
  • (七)Knockout 创建自定义绑定
  • *上位机的定义
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET/C# 使窗口永不获得焦点
  • .Net程序帮助文档制作
  • .net流程开发平台的一些难点(1)
  • .net中调用windows performance记录性能信息
  • 。Net下Windows服务程序开发疑惑
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [14]内置对象
  • [ABC294Ex] K-Coloring
  • [Asp.net mvc]国际化
  • [BZOJ3223]文艺平衡树
  • [CSS]文字旁边的竖线以及布局知识
  • [elastic 8.x]java客户端连接elasticsearch与操作索引与文档
  • [flask]http请求//获取请求头信息+客户端信息
  • [IE编程] 了解Urlmon.dll和Wininet.dll
  • [LeetCode周赛复盘] 第 312 场周赛20220925
  • [LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞
  • [LVGL]:MACOS下使用LVGL模拟器