https://loj.ac/problem/6354

https://www.luogu.org/problemnew/show/P4366

题面见上面。

这题很妙,且可能是我傻,感觉这题不太好想。

前45pts很好骗就不说了。

朴素的建法是O(n^2+m)的,一个点都过不了。

然而事实上一个从x->y权值为w的边是可以被其他边取代的,我们可以把x拆成二进制,一位一位的修改最终到达y,此时经过的权值显然也是w。

也就是说,对于一个点x,我们只需要让他和x*2^k连边即可,这样就优化为O(nlogn+m)了,跑一遍dij就好了。

另外这题将我的dij卡T了于是去抄了别人的dij难受啊啊orz。

#include<cmath>
#include<queue>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef pair<int,int>pii;
#define fi first
#define se second
const int N=1e5+5;
const int M=5e5+5;
inline int read(){int X=0,w=0;char ch=0;while(!isdigit(ch)){w|=ch=='-';ch=getchar();}while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X;
}
struct node{int to,nxt,w;
}e[M+N*20];
int n,m,c,cnt,head[N];
inline void add(int u,int v,int w){e[++cnt].to=v;e[cnt].w=w;e[cnt].nxt=head[u];head[u]=cnt;
}
int dis[N];
priority_queue<pii,vector<pii>,greater<pii> >q;
void dij(int s){memset(dis,127,sizeof(dis));dis[s]=0;q.push(pii(0,s));while(!q.empty()){int u=q.top().se,f=q.top().fi;q.pop();if(f!=dis[u])continue;for(int i=head[u];i;i=e[i].nxt){int v=e[i].to,w=e[i].w;if(dis[v]>dis[u]+w){dis[v]=dis[u]+w;q.push(pii(dis[v],v));}}}return;
}
int main(){n=read(),m=read(),c=read();for(int i=1;i<=m;i++){int u=read(),v=read(),w=read();add(u,v,w);}for(int u=0;u<=n;u++){for(int i=1;i<=n;i<<=1){int v=u^i;if(v>n)continue;add(u,v,i*c);}}int s=read(),t=read();dij(s);printf("%d\n",dis[t]);return 0;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/ +

+++++++++++++++++++++++++++++++++++++++++++

转载于:https://www.cnblogs.com/luyouqi233/p/9059940.html

LOJ6354 洛谷4366:[Code+#4]最短路——题解相关推荐

  1. 洛谷P5520 [yLOI2019] 青原樱 题解

    洛谷P5520 [yLOI2019] 青原樱 题解 题目链接:P5520 [yLOI2019] 青原樱 题意: n n n 个空放 m m m 个物品,两两物品不能直接相邻,至少空一格 纯数学题. 看 ...

  2. 洛谷P5633 最小度限制生成树 题解

    洛谷P5633 最小度限制生成树 题解 题目链接:P5633 最小度限制生成树 题意: 给你一个有 n n n 个节点, m m m 条边的带权无向图,你需要求得一个生成树,使边权总和最小,且满足编号 ...

  3. 洛谷P2619 [国家集训队]Tree I 题解

    洛谷P2619 [国家集训队]Tree I 题解 题目链接:P2619 [国家集训队]Tree I 题意: 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有 need\text{n ...

  4. 洛谷P1282 多米诺骨牌 题解

    洛谷P1282 多米诺骨牌 题解 题目链接:P1282 多米诺骨牌 题意: 多米诺骨牌由上下 222 个方块组成,每个方块中有 1∼61\sim61∼6 个点.现有排成行的上方块中点数之和记为 S1S ...

  5. 洛谷P4084 [USACO17DEC]Barn Painting G 题解

    洛谷P4084 [USACO17DEC]Barn Painting G 题解 题目链接:P4084 [USACO17DEC]Barn Painting G 题意:题意:给定一颗N个节点组成的树,3种颜 ...

  6. 洛谷P3237 [HNOI2014]米特运输 题解

    洛谷P3237 [HNOI2014]米特运输 题解 题目链接:P3237 [HNOI2014]米特运输 题意: 这题面是真的长啊 qwq 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为 ...

  7. 洛谷P4315 月下“毛景树” 题解

    洛谷P4315 月下"毛景树" 题解 题目链接:P4315 月下"毛景树" 题意:请维护一个数据结构,支持 改第 kkk 条边的边权 结点 uuu 到 vvv ...

  8. 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)

    洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...

  9. 洛谷P4287 [SHOI2011]双倍回文 题解

    洛谷P4287 [SHOI2011]双倍回文 题解 题目链接:P4287 [SHOI2011]双倍回文 题意: 记字符串 www 的倒置为 wRw^RwR .例如 (abcd)R=dcba(\tt{a ...

最新文章

  1. 内江将被打造成四川物联网西部副中心
  2. MATLAB实时标定
  3. 海量端口扫描工具masscan
  4. EasyUI Datagrid 自定义列、Foolter及单元格编辑
  5. 【Java笔记】四种权限修饰符总结
  6. Widget实例可以添加多个并独立更新
  7. ssh 本地转发 和远程转发 区别
  8. 用Bat脚本写一个无限弹窗代码
  9. 汽车防撞之FMCW(调频连续波)原理
  10. android大智慧安装目录,大智慧文件目录
  11. 《超越宝典汽配汽修管理系统——“美容管理”模块》项目研发阶段性总结
  12. 根据经纬度查找附近的人计算公式
  13. hive中的UDF 自定义函数 : 如何创建临时/永久函数
  14. RFC8705-OAuth 2.0双向TLS客户端身份验证和证书绑定访问令牌
  15. Python爬取豆瓣电影短评
  16. 3、Windows之CMD装逼命令————CMD命令打开网页(让人一看你就是个电脑高手)
  17. 为什么k8s天然适合微服务?
  18. SVG中以任意直线为对称轴的镜像变换及其矩阵
  19. 关于开源许可证的介绍
  20. Java中的Object类和Class类

热门文章

  1. 中粮集团对话农民丰收节交易会-万祥军:订单农业丰收经
  2. openresty开发系列39--nginx+lua实现接口签名安全认证
  3. 激光扫描仪的扫描方式
  4. Python之旅:列表
  5. 1.springMVC+spring+Mybatis的整合思路
  6. centos安装zendopcache
  7. 一、cocos2dx概念简介
  8. 为什么有些人用一年时间获得了你十年的工作经验?
  9. 【pmcaff】O2O的背后价值:数据将成为O2O真正核心
  10. SQL注入原理及产生过程