[Code+#4] 最短路 - 建图优化,最短路
最短路问题,然而对于任意\(i,j\),从\(i\)到\(j\)可以只花费\((i xor j) \cdot C\)
对每个点\(i\),只考虑到\(j\)满足\(j=i xor 2^k, j \leq i\)
显然其它边可以由这些边组合得到
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MAX_NODE = 500005;
template <class T> class Graph_SP { // 解决单源最短路径问题
public:
vector<pair<int, T> >G[MAX_NODE];
int d[MAX_NODE], v[MAX_NODE]; // 距离表与访问标识表
void make(int t1, int t2, T t3) { // 造边(有向)
G[t1].push_back(make_pair(t2, t3));
}
void reset_graph(int n) { // 用于清除图邻接表
for (int i = 0; i <= n; i++)
G[i].clear();
}
void reset_solver(int n) { // 对距离表与访问标识表的清除 如果改变了类型,该函数可能需要重写!
memset(d, 0x3f, sizeof d);
memset(v, 0x00, sizeof v);
}
void solveDijkstra(int v0, int n) { // 执行主计算任务(使用Dijkstra)
priority_queue<pair<T, int>, vector<pair<T, int> >, greater<pair<T, int> > >q;
reset_solver(n); // 自动调用对距离表与访问标识表的清除
d[v0] = 0;
q.push(make_pair(0, v0));
while (q.size()) {
pair<T, int> p = q.top();
T dis = p.first; // dis为到当前点的距离
int pos = p.second; // pos为当前点
q.pop();
v[pos] = 1;
for (int i = 0; i < G[pos].size(); i++) {
int x = G[pos][i].first; // x为当前枚举边的终点,
T y = G[pos][i].second; // y为当前枚举边的权值
if (d[x] > d[pos] + y) {
d[x] = d[pos] + y;
if (!v[x])
q.push(make_pair(d[x], x));
}
}
}
}
} ;
Graph_SP <int> g;
signed main() {
int n,m,k,t1,t2,t3,a,b;
scanf("%lld%lld%lld",&n,&m,&k);
for(int i=1;i<=m;i++) {
scanf("%lld%lld%lld",&t1,&t2,&t3);
g.make(t1,t2,t3);
}
scanf("%lld%lld",&a,&b);
for(int i=0;i<=n;i++) {
for(int p=0;p<=20;p++) {
int j=i^(1ll<<p);
if(j<=n) g.make(i,j,k*(1ll<<p));
}
}
g.solveDijkstra(a,n);
cout<<g.d[b]<<endl;
}
[Code+#4] 最短路 - 建图优化,最短路的更多相关文章
- 『The Captain 最短路建图优化』
The Captain(BZOJ 4152) Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小 ...
- BZOJ4383/LuoGuP3588 Pustynia/PUS 线段树建图优化
我会告诉你我看了很久很久才把题目看懂吗???怀疑智商了 原来他给的l,r还有k个数字都是下标... 比如给了一个样例 l, r, k, x1,x2,x3...xk,代表的是一个数组num[l]~num ...
- B - Legacy CodeForces - 787D 线段树优化建图+dij最短路 基本套路
B - Legacy CodeForces - 787D 这个题目开始看过去还是很简单的,就是一个最短路,但是这个最短路的建图没有那么简单,因为直接的普通建图边太多了,肯定会超时的,所以要用线段树来优 ...
- HDU 5521 [图论][最短路][建图灵感]
/* 思前想后 还是决定坚持写博客吧... 题意: n个点,m个集合.每个集合里边的点是联通的且任意两点之间有一条dis[i]的边(每个集合一个dis[i]) 求同时从第1个点和第n个点出发的两个人相 ...
- NOIP2013 华容道 (棋盘建图+spfa最短路)
#include <cstdio> #include <algorithm> #include <cstring> #include <queue> # ...
- poj 2135 Farm Tour 最小费用最大流建图跑最短路
题目链接 题意:无向图有N(N <= 1000)个节点,M(M <= 10000)条边:从节点1走到节点N再从N走回来,图中不能走同一条边,且图中可能出现重边,问最短距离之和为多少? 思路 ...
- hdu4725 The Shortest Path in Nya Graph【最短路+建图】
转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4297574.html ---by 墨染之樱花 题目链接:http://acm.hdu ...
- hdu 4885 (n^2*log(n)推断三点共线建图)+最短路
题意:车从起点出发,每次仅仅能行驶L长度,必需加油到满,每次仅仅能去加油站或目的地方向,路过加油站就必需进去加油,问最小要路过几次加油站. 開始时候直接建图,在范围内就有边1.跑最短了,再读题后发现, ...
- Codeforces 938D. Buy a Ticket (最短路+建图)
<题目链接> 题目大意: 有n座城市,每一个城市都有一个听演唱会的价格,这n座城市由m条无向边连接,每天变都有其对应的边权.现在要求出每个城市的人,看一场演唱会的最小价值(总共花费的价值= ...
随机推荐
- 【WPF学习】第十七章 鼠标输入
鼠标事件执行几个关联的任务.当鼠标移到某个元素上时,可通过最基本的鼠标事件进行响应.这些事件是MouseEnter(当鼠标指针移到元素上时引发该事件)和MouseLeave(当鼠标指针离开元素时引发该 ...
- mysql 查询出现 "this is incompatible with sql_mode=only_full_group_by"错误解决方案,以及个人rpm方式重装所遇到的问题备份
一.错误说明 这个错误发生在mysql 5.7 版本及以上版本会出现的问题: mysql .7版本默认的sql配置是:sql_mode="ONLY_FULL_GR ...
- myeclipse 2018 intaslled jars JREs 选项区别,及注意事项
Standard 1.1.x VM与Standard VM的区别 在Eclipse或MyEclipse中要设置Installed JREs时,有三个选择: - Execution Environmen ...
- MongoDB3.6版本新增特性
MongoDB3.6版新特性如下: (1)Default Bind to Localhost 从3.6版本开始,在默认情况下,MongoDB二进制文件mongod和mongos绑定到localhost ...
- 基于SSM开发大学食堂采购管理系统源码
开发环境: Windows操作系统开发工具: Eclipse+Jdk+Tomcat+MySQL数据库 次项目分为管理员和普通用户两种角色 运行效果图
- 一台服务器搭建部署两个或多个Redis实例
问题描述: 今天程序那边说测试服里面有两个项目,为了数据不冲突,想一台服务器搞两个Redis实例, 然后自己这边查询了一下,确实可以这么整,只需要区分端口号和区分配置文件方面就行, 原理与nginx和 ...
- AE工程渲染的时间缓慢,两种方法减少对AE工程渲染的时间!
AE工程渲染的时间缓慢,两种方法减少对AE工程渲染的时间!3秒的片头,渲染时间竟然要花1个多小时,很多新手都产生过这样的疑问?是哪里不对吗?如何才能减少渲染视频的时间?且听我一一道来.主要原因是:工程 ...
- Wannafly Winter Camp 2020 Day 6D 递增递增 - dp,组合数学
给定两个常为 \(n\) 的序列 \(l_i,r_i\),问夹在它们之间 ( \(\forall i, l_i \leq a_i \leq r_i\) ) 的不降序列的元素总和. Solution 先 ...
- caj文件转word
转载:https://baijiahao.baidu.com/s?id=1590365105855177484&wfr=spider&for=pc 使用工具: 迅捷caj转word转换 ...
- 对象浅拷贝Object.assign
const target = { a: { b: { c: { d: 1 } }, e: 5, f: 6, h: 10 } } const source = { a: { b: { c: { d: 1 ...