【XSY1162】鬼计之夜 最短路
题目描述
给你一个\(n\)个点\(m\)条边的有向图,有\(k\)个关键点。求一条最短的从一个关键点到另一个关键点的路径。
\(n,m,k\leq 100000\)
题解
跑\(k^2\)次最短路显然会TLE
考虑两个不同的数有什么可以利用的性质。
其中会有至少一个二进制为不同!
所以可以枚举所有二进制位,从\(0\)的那边向\(1\)的那边跑最短路,再从\(1\)的那边向\(0\)的那边跑最短路。
这样最终答案一定会被计算到。
时间复杂度:\(O(m\log n\log k)\)
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include<utility>
#include<queue>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll,int> pli;
struct graph
{
int h[100010];
int v[100010];
int w[100010];
int t[100010];
int n;
graph()
{
n=0;
memset(h,0,sizeof h);
}
void add(int x,int y,int z)
{
n++;
v[n]=y;
w[n]=z;
t[n]=h[x];
h[x]=n;
}
};
graph g;
//int lx[100010];
//int ly[100010];
//int lz[100010];
ll d[100010];
int b[100010];
int c[100010];
int n,m,k;
priority_queue<pli,vector<pli>,greater<pli> > q;
ll dij(int y)
{
int i;
memset(b,0,sizeof b);
for(i=1;i<=k;i++)
if((i>>(y-1))&1)
q.push(pli(0,c[i]));
while(!q.empty())
{
pli x=q.top();
q.pop();
if(b[x.second])
continue;
b[x.second]=1;
d[x.second]=x.first;
for(i=g.h[x.second];i;i=g.t[i])
q.push(pli(x.first+g.w[i],g.v[i]));
}
ll ans=0x7fffffffffffffffll;
for(i=1;i<=k;i++)
if(b[c[i]]&&!((i>>(y-1))&1))
ans=min(ans,d[c[i]]);
return ans;
}
ll dij2(int y)
{
int i;
memset(b,0,sizeof b);
for(i=1;i<=k;i++)
if(!((i>>(y-1))&1))
q.push(pli(0,c[i]));
while(!q.empty())
{
pli x=q.top();
q.pop();
if(b[x.second])
continue;
b[x.second]=1;
d[x.second]=x.first;
for(i=g.h[x.second];i;i=g.t[i])
q.push(pli(x.first+g.w[i],g.v[i]));
}
ll ans=0x7fffffffffffffffll;
for(i=1;i<=k;i++)
if(b[c[i]]&&(i>>(y-1))&1)
ans=min(ans,d[c[i]]);
return ans;
}
int main()
{
int x,y,z,i;
scanf("%d%d%d",&n,&m,&k);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
g.add(x,y,z);
}
for(i=1;i<=k;i++)
scanf("%d",&c[i]);
ll ans=0x7fffffffffffffffll;
for(i=1;i<=17;i++)
{
ans=min(ans,dij(i));
ans=min(ans,dij2(i));
}
printf("%lld\n",ans);
return 0;
}
【XSY1162】鬼计之夜 最短路的更多相关文章
- 【xsy1162】鬼计之夜 最短路+二进制拆分
套路题(然而我没看题解做不出来) 题目大意:给你一个$n$个点,$m$条有向边的图.图中有$k$个标记点,求距离最近的标记点间距离. 数据范围:$n,m,k≤10^5$. 设$p_i表$示第$i$个标 ...
- Python中三目计算符的正确用法及短路逻辑
今天在看别人代码时看到这样一种写法, 感觉是个挺容易踩到的坑, 搞清楚后写出来备忘. 短路逻辑 Python中进行逻辑运算的时候, 默认采用的是一种叫做短路逻辑的运算规则. 名字是很形象的, 下面直接 ...
- 计蒜客 28202. Failing Components-最短路(Dijkstra) (BAPC 2014 Preliminary ACM-ICPC Asia Training League 暑假第一阶段第一场 B)
B. Failing Components 传送门 题意就是单向图,从起点开始找最短路,然后统计一下个数就可以.方向是从b到a,权值为s. 直接最短路跑迪杰斯特拉,一开始用数组版的没过,换了一个队列版 ...
- 计蒜客 39280.Travel-二分+最短路dijkstra-二分过程中保存结果,因为二分完最后的不一定是结果 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest M.) 2019ICPC西安邀请赛现场赛重现赛
Travel There are nn planets in the MOT galaxy, and each planet has a unique number from 1 \sim n1∼n. ...
- 计蒜客 31001 - Magical Girl Haze - [最短路][2018ICPC南京网络预赛L题]
题目链接:https://nanti.jisuanke.com/t/31001 题意: 一带权有向图,有 n 个节点编号1~n,m条有向边,现在一人从节点 1 出发,他有最多 k 次机会施展魔法使得某 ...
- UOJ244 【UER #7】短路
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- HDU 5521 Meeting(虚拟节点+最短路)
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total ...
- Web前端业界氛围极好的群——鬼懿IT
鬼群简介 鬼懿IT主群号:,鬼懿IT-成长群:181368696 , 创建于2005年12月 ,聚集的业内人事包括:阿当,大漠,辣妈,崔凯,Rei,周裕波,司徒正美,丸子,鬼森林,寒冬,franky, ...
- 【网络流24题】 No.14 孤岛营救问题 (分层图最短路)
[题意] 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛, 营救被敌军俘虏的大兵瑞恩. 瑞恩被关押在一个迷宫里, 迷宫地形复杂, 但幸好麦克得到了迷宫的地形图. 迷宫的外形是 ...
随机推荐
- ASP.NET项目开发
ASP.NET项目开发 1.C/S模式 (client 客户端 server 服务器):QQ.证券.酷狗.旺旺...需要下载响应软件: 工作原理:客户端请求--ASP.net服务器端应用(<-- ...
- Five Dimensional Points CodeForces - 851C (计算几何+暴力)
C. Five Dimensional Points time limit per test 2 seconds memory limit per test 256 megabytes input ...
- java得到日期相减的天数
/** * <li>功能描述:时间相减得到天数 * @param beginDateStr * @param endDateStr * @return * long * @author A ...
- Redis使用和部分源码剖析以及Django缓存和redis的关系
0.特点: a.持久化 b.单进程.单线程 c.5大数据类型 d.用于操作内存的软件. e.虽然是缓存数据库但是可以做持久化的工作 MySQL是一个软件,帮助开发者对一台机器的硬盘进行操作 ...
- js总结:三级联动
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Jenkins [Error] at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:192)
Deploying /root/.jenkins/workspace/zgg-crm-pre/target/crm.war to container Tomcat 7.x Remote with co ...
- bootstrap 弹窗或者提示框插件 bootstrap-growl 和bootstrap-notify
Bootstrap简单好用的页面右上角咆哮提示框 - daidaineteasy的专栏 - CSDN博客https://blog.csdn.net/daidaineteasy/article/deta ...
- Docker安装部署redis
借鉴博客:https://my.oschina.net/u/3489495/blog/1825335 待续... >>>>>>>>>docker安 ...
- css3 text-shadow字体阴影讲解
text-shadow:为字体添加阴影, 可以通过对text-shadow属性设置相关的属性值,来实现现一些需要的字体阴影效果,减少了图片的使用. 基础说明: text-shadow: X轴 ...
- vue前端框架面试问题汇总
1.active-class是哪个组件的属性?嵌套路由怎么定义?答:vue-router模块的router-link组件. 2.怎么定义vue-router的动态路由?怎么获取传过来的动态参数? 答: ...