bzoj4289 Tax
Description
Sample Input
1 2 5
1 3 2
2 3 1
2 4 4
3 4 8
Sample Output



#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cstdlib>
#define REP(i,k,n) for(int i=k;i<=n;i++)
#define in(a) a=read()
#define MAXN 400040
using namespace std;
inline int read(){
int x=,f=;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
f=-;
for(;isdigit(ch);ch=getchar())
x=x*+ch-'';
return x*f;
}
int n,m;
int S,T;
int total,head[MAXN],to[MAXN*],nxt[MAXN*],val[MAXN*];
int Total,Head[],To[],Nxt[],Val[];
int vis[];
long long dis[];
struct edge{
int id,va;
}st[MAXN*];
struct node{
int a;
long long b;
bool operator <(const node &x)const{
return b>x.b;
}
};
priority_queue<node> Q;
inline int change(int x){
if(x%==) return x+;
return x-;
}
inline void adl(int a,int b,int c){
total++;
to[total]=b;
val[total]=c;
nxt[total]=head[a];
head[a]=total;
return ;
}
inline void Adl(int a,int b,int c){
Total++;
To[Total]=b;
Val[Total]=c;
Nxt[Total]=Head[a];
Head[a]=Total;
return ;
}
inline bool cmp(edge a,edge b){
return a.va<b.va;
}
inline void solve(int u){
int cnt=;
for(int e=head[u];e;e=nxt[e]) st[++cnt].id=e,st[cnt].va=val[e];
sort(st+,st+cnt+,cmp);//对于u的所有出边排序
REP(i,,cnt-) Adl(st[i].id,st[i+].id,st[i+].va-st[i].va),Adl(st[i+].id,st[i].id,);//连查分边
for(int e=head[u];e;e=nxt[e]) Adl(change(e),e,val[e]);//每一条出边连向所对入边
return ;
}
inline long long Dijkstra(){
memset(dis,0x7f,sizeof(dis));
dis[S]=;
node p;
p.a=S,p.b=;
Q.push(p);
while(!Q.empty()){
int u=Q.top().a;Q.pop();
if(vis[u]) continue;
vis[u]=;
for(int e=Head[u];e;e=Nxt[e])
if(dis[To[e]]>dis[u]+Val[e]){
dis[To[e]]=dis[u]+Val[e];
node q;
q.a=To[e],q.b=dis[To[e]];
Q.push(q);
}
}
return dis[T];
}
int main(){
in(n),in(m);
int a,b,c;
REP(i,,m) in(a),in(b),in(c),adl(a,b,c),adl(b,a,c);
S=,T=total+;
for(int e=head[];e;e=nxt[e]) Adl(S,e,val[e]);//处理源点
for(int e=head[n];e;e=nxt[e]) Adl(change(e),T,val[e]);//处理汇点
for(int i=;i<=n;i++) solve(i);
printf("%d",Dijkstra());
return ;
}
/*
4 5
1 2 5
1 3 2
2 3 1
2 4 4
3 4 8
*/
bzoj4289 Tax的更多相关文章
- BZOJ4289 Tax 最短路建模
给定一个带边权的无向图,求1到n的最小代价路径.经过一个点的代价是路径上这个点的入边和出边的较大权值. \(n \le 100000, m \le 200000\). 一般的建图是考虑每个点,其入边和 ...
- 【BZOJ-4289】Tax 最短路 + 技巧建图
4289: PA2012 Tax Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 168 Solved: 69[Submit][Status][Dis ...
- [BZOJ4289] [PA2012] Tax 解题报告 (最短路+差分建图)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4289 4289: PA2012 Tax Time Limit: 10 Sec Memo ...
- BZOJ4289 : PA2012 Tax
一个直观的想法是把每条边拆成两条有向边,同时每条有向边是新图中的一个点.对于两条边a->b与b->c,两点之间连有向边,费用为两条边费用的最大值.然后新建源点S与汇点T,由S向所有起点为1 ...
- [BZOJ4289][PA2012]TAX(最短路)
首先考虑一种暴力做法,为每条边拆成两条有向边,各建一个点.若某两条边有公共点,则在边所对应的点之间连一条边,权值为两条边中的较大值.这样跑最短路是$O(m^2\log m)$的. 用类似网络流中补流的 ...
- [Bzoj4289]PA2012 Tax(Dijkstra+技巧建图)
Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边 ...
- 【PA2012】【BZOJ4289】Tax
Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值.求从起点1到点N的最小代价. 起点的代价是离开起点的边的边权.终点的代价是进入终点的边的 ...
- bzoj4289 PA2012 Tax——点边转化
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4289 好巧妙的转化!感觉自己难以想出来... 参考了博客:https://blog.csdn ...
- 【BZOJ-4289】Tax 最短路 + 技巧建图(化边为点)
题意 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边权N<=10 ...
随机推荐
- RESTful记录-RESTful服务
按照REST架构,一个RESTful Web服务不应该继续服务器的客户端的状态.这种限制被称为无状态.它负责客户以它的上下文传递给服务器,然后服务器可以存储这样的上下文,以处理客户端的进一步请求.例如 ...
- bzoj千题计划296:bzoj1053: [HAOI2007]反素数ant
http://www.lydsy.com/JudgeOnline/problem.php?id=1053 求n以内约数个数最多的数 #include<cstdio> using names ...
- (一)Git时间--初识版本控制工具
//配置一下你的身份 git config --global use.name "Douzi" git config --global use.email "jdouzi ...
- Spring: 读取 .properties 文件地址,json转java对象,el使用java类方法相关 (十三)
1. 在Java中获取 .properties 文件的路径 (src/main/resources 下) ProjectName |---src/main/java |---src/main/reso ...
- AngularJs -- 内置指令
AngularJS提供了一系列内置指令.其中一些指令重载了原生的HTML元素,比如<form>和<a>标签, 当在HTML中使用标签时,并不一定能明确看出是否在使用指令. 其他 ...
- 20155321 2016-2017-2 《Java程序设计》第五周学习总结
20155321 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 异常处理 Java提供特有的语句进行处理 try { 需要被检测的代码; } cat ...
- CSS font系列
font-family font-family: Verdana,Helvetica,Arial,"Microsoft YaHei",sans-serif; font-family ...
- Shell命令行中特殊字符与其转义详解(去除特殊含义)
特殊符号及其转义 大家都知道在一个shell命令是由命令名和它的参数组成的, 比如 cat testfile, 其中cat是命令名, testfile是参数. shell将参数testfile传递给c ...
- 【API】NetUserEnum-获取系统所有账户名称
1 说明 该NetUserEnum函数检索服务器上所有用户帐户的信息. 函数原型: NET_API_STATUS NetUserEnum( _In_ LPCWSTR servername, _In_ ...
- TCP长连接和短连接的区别【转】
转自:https://www.cnblogs.com/onlysun/p/4520553.html 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接, ...