题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4398

按二进制每一位是 0/1 把 1 号点的儿子分成两组,分别作为起点和终点跑多起点最短路,最优解的起点和终点总有一次会被分到不同组里;

太久没写 dijkstra 竟然WA了4次...别忘了 priority_queue 是大根堆-_-,还要注意循环计数的 i,j 不要重了...

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int const xn=,xm=1e5+,inf=0x3f3f3f3f;
int n,m,hd[xn],ct,nxt[xm<<],to[xm<<],w[xm<<],dis[xn],ans;
bool vis[xn],in[xn],out[xn];
struct N{
int d,id;
bool operator < (const N &y) const
{return d>y.d;}//>
};
priority_queue<N>q;
int rd()
{
int ret=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=; ch=getchar();}
while(ch>=''&&ch<='')ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return f?ret:-ret;
}
void add(int x,int y,int z){to[++ct]=y; nxt[ct]=hd[x]; w[ct]=z; hd[x]=ct;}
void dij()
{
memset(vis,,sizeof vis);
while(q.size())
{
int x=q.top().id; q.pop();
if(vis[x])continue; vis[x]=;
for(int i=hd[x],u;i;i=nxt[i])
{
if(vis[u=to[i]]||(u==&&out[x])||(x==&&in[u]))continue;
if(dis[u]>dis[x]+w[i])
dis[u]=dis[x]+w[i],q.push((N){dis[u],u});
}
}
ans=min(ans,dis[]);
}
int main()
{
n=rd(); m=rd();
for(int i=,x,y,z,k;i<=m;i++)
{
x=rd(); y=rd(); z=rd(); k=rd();
add(x,y,z); add(y,x,k);
}
int cnt=,t=n; while(t)cnt++,t/=; ans=inf;
for(int i=;i<cnt;i++)
{
memset(dis,0x3f,sizeof dis); while(q.size())q.pop();
for(int j=hd[],u;j;j=nxt[j])
{
in[u=to[j]]=; out[u]=;
if(u&(<<i))dis[u]=w[j],out[u]=,q.push((N){w[j],u});
else in[u]=;
}
dij();
memset(dis,0x3f,sizeof dis); while(q.size())q.pop();
for(int j=hd[],u;j;j=nxt[j])
{
if(in[u=to[j]])in[u]=,out[u]=,dis[u]=w[j],q.push((N){w[j],u});
else out[u]=,in[u]=;
}
dij();
}
printf("%d\n",(ans==inf?-:ans));
return ;
}

最新文章

  1. java程序设计之循环链表
  2. 【BZOJ-3553】三叉神经树 树链剖分
  3. python中enumerate()的用法
  4. css background-size
  5. MySQL4:存储过程和函数
  6. 动态分配的顺序线性表的十五种操作—C语言实现
  7. 【转】input输入框中光标高度的变化问题
  8. Origin9.1如何使用原始数据(Raw Data)绘制风向玫瑰图
  9. js 当前日期及时间
  10. SQLServer学习笔记&lt;&gt;sql的范围内查找,sql数据类型,字符串处理函数
  11. Java EE 锚、表格用法
  12. ZOJ-2338 The Towers of Hanoi Revisited 输出汉诺塔的最优解移动过程
  13. 正确的lnamp支持SSI的方法!即支持SHTML和include调用!
  14. python http长连接客户端
  15. [luogu]P1352 没有上司的舞会[树形DP]
  16. hdu3720 Arranging Your Team
  17. [Bayes] Variational Inference for Bayesian GMMs
  18. Microsoft Windows Server 2012 Ad域搭建
  19. Spring 使用介绍(十三)—— Bean的生命周期
  20. Shell编程-12-Shell脚本规范及调试

热门文章

  1. 读取编码器信息Python2.7和Python3.3版本差异及解决,一次订阅多次调用callback的解决
  2. 电音中DJ/Producer/MC/EDM/Remix/Mix的名词解释(转)
  3. Go -- log4go日志
  4. 算法 - 求两个自然数的最大公约数(C++)
  5. 使用RTL-SDR,从打开一个车门到批量打开车门
  6. BUPT复试专题—C翻转(2010)
  7. 关于Java中强制类型转换的问题
  8. java utf8字符 导出csv 文件的乱码问题。
  9. JS判断访问设备(userAgent)加载不同页面 JS判断客户端操作系统类型(platform)
  10. Cocos2d-x学习资源