【PA2012】【BZOJ4289】Tax

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;
}

原文地址:https://www.cnblogs.com/zhchoutai/p/8677924.html

时间: 2024-10-06 15:12:43

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

HDU1385 Minimum Transport Cost 【Floyd】+【路径记录】

Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7496    Accepted Submission(s): 1918 Problem Description These are N cities in Spring country. Between each pair of cities

【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取”产品付费数量等于0的问题”】

转的别人的 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成设置账户信息. 确定 ItunesConnect 里 “Contracts, Tax, and Banking”的状态,如下图所示,即可: 这里也是由于Himi疏忽的原因没有说明,这里先给童鞋们带来的麻烦,致以歉意. //——2012-6-25日更新iap恢复 看到很多童鞋说让Himi讲解如何恢复i

【Windows10&nbsp;IoT开发系列】配置篇

原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry Pi.MinnowBoard和Galileo平台上的核心版.本文重点针对Raspberry Pi平台的Windwos10 IoT配置做介绍. Windows 10 IoT Editions ​一:设置你的电脑. 注:​开发Windows10 IoT的电脑需要Visual Studio 2015.

【Windows10&nbsp;IoT开发系列】PowerShell的相关配置

原文:[Windows10 IoT开发系列]PowerShell的相关配置 可使用 Windows PowerShell 远程配置和管理任何 Windows 10 IoT 核心版设备.PowerShell 是基于任务的命令行 Shell 和脚本语言,专为进行系统管理而设计. 1.​启动 PowerShell (PS) 会话 注:若要使用装有Windows10 IoT Core设备启动PS会话,首先需要在主机电脑与设备之间创建信任关系. ​启动 Windows IoT 核心版设备后,与该设备相连的

【Windows10&nbsp;IoT开发系列】API&nbsp;移植工具

原文:[Windows10 IoT开发系列]API 移植工具 Windows 10 IoT Core 中是否提供你的当前 Win32 应用程序或库所依赖的 API? 如果不提供,是否存在可使用的等效 API? 此工具可以为你回答这些问题,并协助你将你的当前 Win32 应用程序和库迁移到 Windows IoT Core. Windows 10 IoT 核心版 API 移植工具可在 ms-iot/iot-utilities github 存储库中找到.下载存储库 zip 并将 IoTAPIPor

【Windows10&nbsp;IoT开发系列】“Hello,World!”指导

原文:[Windows10 IoT开发系列]"Hello,World!"指导 本文主要是介绍使用C#来开发一个可以运行在Raspberry Pi2上的一个基本项目. ​1.在启动Visual Studio 2015后,选择"文件"→"新建项目". ​在打开的"新建项目"对话框中,选择"通用". ​选择第一个项目"空白应用(通用Windows)" 新建项目 ​注:如果这是你创建的第一个项

【opencv入门之二】感兴趣区域ROI,线性混合addWeighted

参考网站: http://blog.csdn.net/poem_qianmo/article/details/20911629 1.感兴趣区域ROI //[2]定义一个Mat类型并给其设定ROI区域 Mat imageROI = srcImage1( Rect(200, 250, logoImage.cols, logoImage.rows )); //[3]加载掩摸(必须是灰度图) Mat mask = imread( "dota_logo.jpg", 0 ); //[4]将掩摸拷贝

【Windows10&nbsp;IoT开发系列】Powershell命令行实用程序

原文:[Windows10 IoT开发系列]Powershell命令行实用程序 更新帐户密码: 强烈建议你更新默认的管理员帐户密码.若要更新帐户密码,你可以发出以下命令: net user Administrator [new password]​ (其中 [new password] 表示你选择的强密码). 创建本地用户帐户: 如果你想要授予其他人访问你的 Windows IoT Core 设备的权限,你可以通过在 net user [username] [password] /add​ 中键

【python之路35】网络编程之socket相关

Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Unix,而Unix/Linux基本哲学之一就是"一切皆文件",对于文件用[打开][读写][关闭]模式来操作.socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO.打开.关闭) socket和file的区别: fil

【ASP.NET实战教程】ASP.NET实战教程大集合,各种项目实战集合

[ASP.NET实战教程]ASP.NET实战教程大集合,各种项目实战集合,希望大家可以好好学习教程中,有的比较老了,但是一直很经典!!!!论坛中很多小伙伴说.net没有实战教程学习,所以小编连夜搜集整理出一些比较好的教程,望君好好珍惜,资源不易,且保持,且珍惜直接上资源截图: 下载地址[回复可见]:http://www.fu83.cn/thread-282-1-1.html 感觉文章写的好,一定要回复 推荐哦!!!