最短路问题,然而对于任意\(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] 最短路 - 建图优化,最短路的更多相关文章

  1. 『The Captain 最短路建图优化』

    The Captain(BZOJ 4152) Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小 ...

  2. BZOJ4383/LuoGuP3588 Pustynia/PUS 线段树建图优化

    我会告诉你我看了很久很久才把题目看懂吗???怀疑智商了 原来他给的l,r还有k个数字都是下标... 比如给了一个样例 l, r, k, x1,x2,x3...xk,代表的是一个数组num[l]~num ...

  3. B - Legacy CodeForces - 787D 线段树优化建图+dij最短路 基本套路

    B - Legacy CodeForces - 787D 这个题目开始看过去还是很简单的,就是一个最短路,但是这个最短路的建图没有那么简单,因为直接的普通建图边太多了,肯定会超时的,所以要用线段树来优 ...

  4. HDU 5521 [图论][最短路][建图灵感]

    /* 思前想后 还是决定坚持写博客吧... 题意: n个点,m个集合.每个集合里边的点是联通的且任意两点之间有一条dis[i]的边(每个集合一个dis[i]) 求同时从第1个点和第n个点出发的两个人相 ...

  5. NOIP2013 华容道 (棋盘建图+spfa最短路)

    #include <cstdio> #include <algorithm> #include <cstring> #include <queue> # ...

  6. poj 2135 Farm Tour 最小费用最大流建图跑最短路

    题目链接 题意:无向图有N(N <= 1000)个节点,M(M <= 10000)条边:从节点1走到节点N再从N走回来,图中不能走同一条边,且图中可能出现重边,问最短距离之和为多少? 思路 ...

  7. hdu4725 The Shortest Path in Nya Graph【最短路+建图】

    转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4297574.html      ---by 墨染之樱花 题目链接:http://acm.hdu ...

  8. hdu 4885 (n^2*log(n)推断三点共线建图)+最短路

    题意:车从起点出发,每次仅仅能行驶L长度,必需加油到满,每次仅仅能去加油站或目的地方向,路过加油站就必需进去加油,问最小要路过几次加油站. 開始时候直接建图,在范围内就有边1.跑最短了,再读题后发现, ...

  9. Codeforces 938D. Buy a Ticket (最短路+建图)

    <题目链接> 题目大意: 有n座城市,每一个城市都有一个听演唱会的价格,这n座城市由m条无向边连接,每天变都有其对应的边权.现在要求出每个城市的人,看一场演唱会的最小价值(总共花费的价值= ...

随机推荐

  1. C# 数据类型详解以及变量、对象与内存

    学习刘铁猛老师<C#语言入门详解>视频,针对其中重点知识点进行总结. 1.什么是类型? 类型又称为数据类型(Data Type),数据类型在数据结构中的定义是一个值的集合以及定义在这个值集 ...

  2. windows10家庭版的策略组

    策略组是个好东西,可惜家庭版没有 但是,请看大佬博客https://blog.csdn.net/cangsheng45/article/details/82262037

  3. 【python数据挖掘】批量爬取站长之家的图片

    概述: 站长之家的图片爬取 使用BeautifulSoup解析html 通过浏览器的形式来爬取,爬取成功后以二进制保存,保存的时候根据每一页按页存放每一页的图片 第一页:http://sc.china ...

  4. [IOI2018] werewolf 狼人 [kruskal重构树+主席树]

    题意: 当你是人形的时候你只能走 \([L,N-1]\) 的编号的点(即大于等于L的点) 当你是狼形的时候你只能走 \([1,R]\) 的编号的点(即小于等于R的点) 然后问题转化成人形和狼形能到的点 ...

  5. 清北学堂—2020.1提高储备营—Day 3(图论初步(一))

    qbxt Day 3 --2020.1.19 济南 主讲:李奥 目录一览 1.图论(图.图的存储方式.最小生成树的定义) 总知识点:图论 前言:众所周知,图论是一个非常重要的部分,而这次集训也可以算从 ...

  6. JQuery调用WebService封装方法

    //提交的webservice链接 //var url = "/wsstafffrate?OpenWebService"; //请求前拼接好的soap字符串 //var soapd ...

  7. C# WPF联系人列表(1/3)

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. C# WPF联系人列表(1/3) 阅读导航 本文背景 代码实现 本文参考 1.本文背景 聊天软 ...

  8. 【算法】——递归:小白正在上楼梯,楼梯有n阶台阶,小白一次可以上1阶,2阶或者3阶,实现一个方法,计算小白有多少种走完楼梯的方式。

    分析:从最后一步分析,能有的情况有三种情况构成,写出如图所示的方程 //和斐波拉契相似 int void f(int n) { //考虑出口 ) ;//正常思路是返回0 ) ;//通过自己想可以得出只 ...

  9. 浅谈python的第三方库——numpy(一)

    python作为广受欢迎的一门编程语言,其中很重要的一个原因便是它可以使用很多第三方库. 对第三方库的理解,在笔者看来就是一些python爱好者和专门的研发机构,为满足某一特定应用领域的需要,使用py ...

  10. flutter常用插件(持续更新)

    flutter插件官网地址:https://pub.dartlang.org/packages/ 1. image_picker 一个可以从图库选择图片,并可以用相机拍摄新照片的flutter插件 2 ...