题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4289

把边转化成点,同一个原有点相连的边中,边权小的向大的连差值的边,大的向小的连0的边;

一开始想的是给每个新点记一个点权是这个点(边)原来的权,走到它时先加上点权,因为要在原图上经过这条边还是要花费边权;

但是这样在原图中的边之间转移时会把它们的边权都加上,就不对了;

所以应该是把原图的边进一步拆成两个点,两端点的集合各加入一个,这两点之间连原边权的边;

题目上什么也没说...总之 dis 是 long long 的;

如果直接把刚才存边用的结构体放进 queue,就要注意把结构体的 w 定义成 ll,而且一定注意结构体内部定义变量的顺序!因为 (N){..., ...} 的写法是强调顺序的!

——然后发现这道题三个月前做过-_- https://www.cnblogs.com/Zinn/p/9326302.html

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define pb push_back
using namespace std;
typedef long long ll;
int const xn=2e5+,xm=1e5+;
int n,m,s,t,hd[xn<<],ct,to[xn<<],nxt[xn<<],w[xn<<];
ll dis[xn<<];
bool vis[xn<<];
struct N{
ll w; int id;//ll(dis)
bool operator < (const N &y) const
{return w<y.w;}
};
vector<N>v[xm];
priority_queue<N>q;
int rd()
{
int ret=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=; ch=getchar();}
while(ch>=''&&ch<='')ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return f?ret:-ret;
}
void add(int x,int y,int z){to[++ct]=y; nxt[ct]=hd[x]; w[ct]=z; hd[x]=ct;}
void dij()
{
while(q.size())
{
int x=q.top().id; q.pop();
if(vis[x])continue; vis[x]=;
for(int i=hd[x],u;i;i=nxt[i])
{
if(dis[u=to[i]]>dis[x]+w[i])
dis[u]=dis[x]+w[i],q.push((N){-dis[u],u});
}
}
}
int main()
{
n=rd(); m=rd(); s=; t=*m+;
for(int i=,x,y,z;i<=m;i++)
{
x=rd(); y=rd(); z=rd();
v[x].pb((N){z,i}); v[y].pb((N){z,i+m});
add(i,i+m,z); add(i+m,i,z);
}
for(int i=;i<v[].size();i++)add(s,v[][i].id,v[][i].w);
for(int i=;i<v[n].size();i++)add(v[n][i].id,t,);//
for(int i=;i<=n;i++)
{
sort(v[i].begin(),v[i].end());
for(int j=;j<v[i].size();j++)
add(v[i][j-].id,v[i][j].id,v[i][j].w-v[i][j-].w),add(v[i][j].id,v[i][j-].id,);
}
memset(dis,0x3f,sizeof dis);
dis[s]=; q.push((N){,s});
dij();
printf("%lld\n",dis[t]);
return ;
}

bzoj 4289 TAX —— 点边转化的更多相关文章

  1. bzoj 4289 Tax - 最短路

    题目传送门 这是一条通往vjudge的神秘通道 这是一条通往bzoj的神秘通道 题目大意 如果一条路径走过的边依次为$e_{1}, e_{2}, \cdots , e_{k}$,那么它的长度为$e_{ ...

  2. 「BZOJ 4289」 PA2012 Tax

    「BZOJ 4289」 PA2012 Tax 题目描述 给出一个 \(N\) 个点 \(M\) 条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点 \(1\) 到点 \( ...

  3. bzoj4289 PA2012 Tax——点边转化

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4289 好巧妙的转化!感觉自己难以想出来... 参考了博客:https://blog.csdn ...

  4. bzoj 4289: PA2012 Tax

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

  5. BZOJ 4289: PA2012 Tax 差分建图 最短路

    https://www.lydsy.com/JudgeOnline/problem.php?id=4289 https://www.cnblogs.com/clrs97/p/5046933.html  ...

  6. bzoj 4289 PA2012 Tax——构图

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4289 可以把一个点上的边按权值排序,然后边权小的向第一个比它大的连差值的边,边权大的向第一个 ...

  7. ●BZOJ 4289 PA2012 Tax

    ●赘述题目 算了,题目没有重复的必要. 注意理解:对答案造成贡献的是每个点,就是了. 举个栗子: 对于如下数据: 2 1 1 2 1 答案是 2: ●题解 方法:建图(难点)+最短路. 先来几个链接: ...

  8. BZOJ.4289.PA2012 Tax(思路 Dijkstra)

    题目链接 \(Description\) 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价 ...

  9. 【刷题】BZOJ 4289 PA2012 Tax

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

随机推荐

  1. Neo4j 第六篇:Cypher语法

    Cypher是图形数据库查询语言事实上的标准. 一,Cypher类型系统 Cypher支持的类型系统分为三类:属性类型,复合类型和结构类型. 1,属性类型 属性类型:Integer.Float.Str ...

  2. HttpClient配置

    ClientConfiguration.java 该类讲解了HttpClient的各方面的配置 package com.ydd.study.hello.httpclient; import java. ...

  3. HBase总结

    1.HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”.就像Bigtable利用了Google ...

  4. 【Linux】在虚拟机上安装ubuntu

    虚拟机安装步骤  参考:http://www.cnblogs.com/sxdcgaq8080/p/7466529.html 在安装ubuntu系统之前,当然是下载一个ubuntu的iso镜像在本地啦. ...

  5. jmeter自定义并发用户数图形插件介绍

    Stepping Thread Group马上要被废弃了,废弃原因不知道,官方推荐使用 BlazeMeter Inc.公司贡献的插件Concurrency Thread Group,配合 Throug ...

  6. nrf51822中app_button 的应用

    Button Handler(按键处理程序) 按键处理程序是使用GPIOTE(GPIO Task and Event)的处理机制实现的,为了防止按键的抖动.在GPIOTE event(事件)处理程序中 ...

  7. 用Meta 取消流量器缓存方便调试

    <!-- 禁止浏览器从本地缓存中调阅页面.--> <meta http-equiv="pragram" content="no-cache"& ...

  8. 项目记录26--unity-tolua框架 View03-UIManager.lua

    做为程序员要懂得假设保持健康,对电脑时间太长非常easy眼花,得脖子病,腰都疼,这星期六日组团到康宁去了,哈哈. 一个字"疼"!!!! 废话不多少,把UIManager.lua个搞 ...

  9. vim note (1)

    'vim' go into the vim mode 'i' 'a' 's'    is means insert mode 'v' is means visual mode 'esc' is mea ...

  10. java中类加载顺序(深入Java)

    未涉及虚拟机 0.<init>与<clinit>的区别 1.类的加载过程 2.类的使用方式 3.类的加载来源 4.重载之泛型参数不同可以吗 5.参考 引子 记得上次中秋一哥们写 ...