Description

给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值。求从起点1到点N的最小代价。

起点的代价是离开起点的边的边权。终点的代价是进入终点的边的边权

N<=100000

M<=200000

Input

Output

Sample Input

4 5

1 2 5

1 3 2

2 3 1

2 4 4

3 4 8

Sample Output

12

HINT

Source

一眼能看出是最短路变种..

可是我仅仅会n^2建图T_T

n^2建图就是边转点随便建个新图然后最短路即可了..

这妥妥的TLE啊_ (:зゝ∠)_

这里是Claris的正解

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define MAXN 100010
#define MAXM 200010
#define LL long long
#define GET (ch>='0'&&ch<='9')
using namespace std;
int n,m,top,Top,cnt,_top;
int start,end;
const LL MAXINT=1ll<<60;
LL dis[MAXM<<1];
bool vis[MAXM<<1];
struct edge
{
int to,st;
edge *next;
}e[MAXM<<1],*prev[MAXN];
void insert(int u,int ed,int st) {e[++top].to=ed;e[top].st=st;e[top].next=prev[u];prev[u]=&e[top];}
struct Edge
{
int to,w;
Edge *next;
}E[MAXM<<3],*Prev[MAXM<<1];
void Insert(int u,int v,int w) {E[++Top].to=v;E[Top].w=w;E[Top].next=Prev[u];Prev[u]=&E[Top];}
struct S
{
int u,v,w;
bool operator <(const S& a)const {return w<a.w;}
}s[MAXM<<1],sta[MAXM];
void in(int &x)
{
char ch=getchar();x=0;
while (!GET) ch=getchar();
while (GET) x=x*10+ch-'0',ch=getchar();
}
struct node
{
int x;
LL dis;
bool operator <(const node& a)const {return dis>a.dis;}
};
void dijkstra(int s)
{
priority_queue<node> heap;
for (int i=1;i<=end;i++) dis[i]=MAXINT;dis[s]=0;heap.push((node){s,0});
while (!heap.empty())
{
int x=heap.top().x;heap.pop();
if (vis[x]) continue;vis[x]=1;
for (Edge *i=Prev[x];i;i=i->next)
if (dis[i->to]>dis[x]+i->w) dis[i->to]=dis[x]+i->w,heap.push((node){i->to,dis[i->to]});
}
}
int main()
{
in(n);in(m);int u,v,w;
for (int i=1;i<=m;i++)
{
in(u);in(v);in(w);
s[++cnt]=(S){u,v,w};s[++cnt]=(S){v,u,w};
insert(u,cnt,cnt-1);insert(v,cnt-1,cnt);
}
for (int i=1;i<=n;i++)
{
_top=0;
for (edge *j=prev[i];j;j=j->next) sta[++_top]=(S){j->to,j->st,s[j->to].w};
if (!_top) continue;sort(sta+1,sta+_top+1);
for (int j=1;j<=_top;j++) Insert(sta[j].u,sta[j].v,sta[j].w);
for (int j=1;j<_top;j++) Insert(sta[j].v,sta[j+1].v,sta[j+1].w-sta[j].w),Insert(sta[j+1].v,sta[j].v,0);
}
start=cnt+1;end=start+1;
for (int i=1;i<=cnt;i++)
{
if (s[i].u==1) Insert(start,i,s[i].w);
if (s[i].v==n) Insert(i,end,s[i].w);
}
dijkstra(start);cout<<dis[end]<<endl;
}

【PA2012】【BZOJ4289】Tax的更多相关文章

  1. 【odoo14】【开发侧】权限配置

    欢迎转载,但需标注出处,谢谢! 说明: 本文面向开发人员,普通用户可参考[odoo14][用户侧]权限配置.文章结构与用户侧一致. 目录 一. odoo中的对象 二. 权限控制 2.1 实现原理 2. ...

  2. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  3. 【疯狂造轮子-iOS】JSON转Model系列之一

    [疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...

  4. 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付

    前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...

  5. 【AutoMapper官方文档】DTO与Domin Model相互转换(上)

    写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...

  6. 【Win 10 应用开发】应用预启动

    所谓预启动,其实你一看那名字就知道是啥意思了,这是直接译,也找不到比这个叫法更简练的词了.在系统资源允许的情况下(比如电池电量充足,有足够的内存空间),系统会把用户常用的应用程序在后台启动,但不会显示 ...

  7. 【Win 10 应用开发】启动远程设备上的应用

    这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...

  8. 【开源】分享2011-2015年全国城市历史天气数据库【Sqlite+C#访问程序】

    由于个人研究需要,需要采集天气历史数据,前一篇文章:C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子),介绍了基本的采集思路和核心代码,经过1个星期的采集,历史数据库 ...

  9. 【原创分享·微信支付】C# MVC 微信支付教程系列之现金红包

            微信支付教程系列之现金红包           最近最弄这个微信支付的功能,然后扫码.公众号支付,这些都做了,闲着无聊,就看了看微信支付的其他功能,发现还有一个叫“现金红包”的玩意,想 ...

  10. 【原创分享·微信支付】 C# MVC 微信支付教程系列之扫码支付

    微信支付教程系列之扫码支付                  今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添 ...

随机推荐

  1. [CF632E]Thief in a Shop

    题目大意:有一个小偷,拿$k$个东西,有$n$种产品,每种产品都有无限多个.对于每个第$i$ 种产品,它的价值是$A_i$.可能偷走的物品价值之和. 题解:对于所有的物品构造生成函数$F(x)=\su ...

  2. 【BestCoder #45】

    用家里的电脑来编程,各种不算 一开始15分钟刷掉T1和T2,然后就永远地卡在了T3... 后来看题解,傻了眼... 它强调的“只有一个答案”我还以为这是在提示我二分答案,于是我一直往权值线段树那个方向 ...

  3. BZOJ1800 [Ahoi2009]fly 飞行棋 【枚举】

    题目 给出圆周上的若干个点,已知点与点之间的弧长,其值均为正整数,并依圆周顺序排列. 请找出这些点中有没有可以围成矩形的,并希望在最短时间内找出所有不重复矩形. 输入格式 第一行为正整数N,表示点的个 ...

  4. 洛谷 P2606 [ZJOI2010]排列计数 解题报告

    P2606 [ZJOI2010]排列计数 题目描述 称一个\(1,2,...,N\)的排列\(P_1,P_2...,P_n\)是\(Magic\)的,当且仅当对所以的\(2<=i<=N\) ...

  5. 8.2 前端检索的敏感词过滤的Python实现(针对元搜索)

    对于前端的搜索内容进行控制,比如敏感词过滤,同样使用socket,这里使用Python语言做一个demo.这里不得不感叹一句,socket真是太神奇了,可以跨语言把功能封装,为前端提供服务. 下面就是 ...

  6. 服务器 阿里云服务器Ubuntu挂载数据盘

    服务器 阿里云服务器Ubuntu挂载数据盘  转自:http://www.codingyun.com/article/24.html coding云运行在阿里云的Ubuntu 12.04 64位操作系 ...

  7. 解决jquery与zepto等其它库冲突兼容的问题

    解决jquery与zepto等其它库冲突兼容的问题;(function ($) {    }) (jQuery); ;(function ($) {    }) (Zepto); 在Bootstrap ...

  8. java io 网络编程 高性能NIO

    很久没写了,一是觉得这后台不怎么方便,二是 写的时候突然觉得没兴趣了. 还好,今天突然想记一下,那就随便写吧.  1.一开始还是放几个连接.  什么是 同步,异步,阻塞,非阻塞 : http://bl ...

  9. HDU1251统计难题---Trie Tree

    map巧过 #include <stdio.h> #include <string.h> #include <map> #include <string> ...

  10. 我读过的最好的epoll讲解--转自”知乎“ 【转】

    转自:http://blog.csdn.net/xu3737284/article/details/12715963 首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O ...