最短路问题,然而对于任意\(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;
}

最新文章

  1. python学习1
  2. [SI]source insight使用
  3. C#使用委托进行异步编程。
  4. ef6 缓存的问题没有了
  5. python2.7之MySQLdb模块 for linux安装
  6. 配置jsp开发环境
  7. MySQL删除表数据
  8. 注解Annotation 详解(转)
  9. object-c 1
  10. Android源代码之Gallery专题研究(2)
  11. shell常用命令的用法
  12. 百用随身系统 Veket Linux
  13. win10 设置默认输入法为英文,ctrl +shift切换中文
  14. Python3.6_安装numpy
  15. 自学Python全栈开发第一次笔记
  16. UVa839
  17. Maths | 二次型求偏导
  18. pycharm运行Django发生AppRegistryNotReady: Apps aren&#39;t loaded yet.
  19. Educational Codeforces Round 49 (Rated for Div. 2)A到C题
  20. PyCharm更改字体和界面样式

热门文章

  1. css如何玩转有序无序列表项list样式
  2. 嗅探、DNS劫持配合CS钓鱼
  3. SpringBoot整合NoSql--(三)Redis集群
  4. node的httpserver简单创建
  5. linux中 nodejs 安装 sqlite3 出现的问题
  6. app简单压力测试
  7. Swift Playgrounds for mac基础知识介绍
  8. mybatis中用到的9种设计模式
  9. 关于跨域cookie,在代码无问题下,浏览器set-cookie显示有内容,但浏览器没写入cookie(刷新没有cookie)
  10. 开发分支管理模型之阿里AoneFlow