hdu 6166 Senior Pan
http://acm.hdu.edu.cn/showproblem.php?pid=6166
题意:
给出一张无向图,给定k个特殊点
求这k个特殊点两两之间的最短路
二进制分组
枚举一位二进制位
这一位为1的放到起点集合
这一位为0的放到终点集合
跑一遍两个集合间的最短路
因为是有向图,反过来再跑一遍
正确性分析:
设最优解是x和y间的最短路
若x和y被分在了两个不同的集合,那么两个集合的最短路就是x和y的最短路
而任意两个点至少有一位二进制不同
所以一定会有x和y分在两个不同集合的时候
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> using namespace std; #define N 100001 typedef long long LL; int n,k; int front[N],to[N],nxt[N],val[N],tot; int point[N]; struct node
{
int id;
LL dis; node(int id_=,LL dis_=):id(id_),dis(dis_){} bool operator < (node p) const
{
return dis>p.dis;
}
};
priority_queue<node>q; bool End[N],vis[N]; LL dis[N];
LL ans; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} void add(int u,int v,int w)
{
to[++tot]=v; nxt[tot]=front[u]; front[u]=tot; val[tot]=w;
} void dijkstra()
{
node now;
while(!q.empty())
{
now=q.top();
q.pop();
if(vis[now.id]) continue;
vis[now.id]=true;
for(int i=front[now.id];i;i=nxt[i])
if(dis[now.id]+val[i]<dis[to[i]])
{
dis[to[i]]=dis[now.id]+val[i];
if(End[to[i]]) ans=min(ans,dis[to[i]]);
else q.push(node(to[i],dis[to[i]]));
}
}
} void solve()
{
int S,bit;
for(S=;(<<S)-<k;++S);
for(int j=;j<=S;++j)
{
bit=<<j-;
memset(End,false,sizeof(End));
memset(vis,false,sizeof(vis));
memset(dis,,sizeof(dis));
for(int i=;i<=k;++i)
{
if(point[i] & bit) q.push(node(point[i],)),dis[point[i]]=;
else End[point[i]]=true;
}
dijkstra();
memset(End,false,sizeof(End));
memset(vis,false,sizeof(vis));
memset(dis,,sizeof(dis));
for(int i=;i<=k;++i)
{
if(!(point[i] & bit)) q.push(node(point[i],)),dis[point[i]]=;
else End[point[i]]=true;
}
dijkstra();
}
} void clear()
{
tot=;
memset(front,,sizeof(front));
ans=1e18;
} int main()
{
int T;
int m;
int u,v,w;
read(T);
for(int t=;t<=T;++t)
{
clear();
read(n); read(m);
while(m--)
{
read(u); read(v); read(w);
add(u,v,w);
}
read(k);
for(int i=;i<=k;++i) read(point[i]);
solve();
printf("Case #%d: %I64d\n",t,ans);
}
}
hdu 6166 Senior Pan的更多相关文章
- HDU 6166 Senior Pan (最短路变形)
题目链接 Problem Description Senior Pan fails in his discrete math exam again. So he asks Master ZKC to ...
- HDU 6166.Senior Pan()-最短路(Dijkstra添加超源点、超汇点)+二进制划分集合 (2017 Multi-University Training Contest - Team 9 1006)
学长好久之前讲的,本来好久好久之前就要写题解的,一直都没写,懒死_(:з」∠)_ Senior Pan Time Limit: 12000/6000 MS (Java/Others) Memor ...
- HDU 6166 Senior Pan 二进制分组 + 迪杰斯特拉算法
Senior Pan Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Probl ...
- 2017多校第9场 HDU 6166 Senior Pan 堆优化Dij
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6166 题意:给你一个有向图,然后给你k个点,求其中一个点到另一个点的距离的最小值. 解法:枚举二进制位 ...
- HDU 6166 Senior Pan(k点中最小两点间距离)题解
题意:n个点,m条有向边,指定k个点,问你其中最近的两点距离为多少 思路:这题的思路很巧妙,如果我们直接枚举两点做最短路那就要做C(k,2)次.但是我们换个思路,我们把k个点按照二进制每一位的0和1分 ...
- HDU 6166 Senior Pan(二进制分组+最短路)
题意 给出一个\(n\)个点\(m\)条边的有向图\((n,m<=100000)\),从中选择\(k\)个点\((k<=n)\),问这k个点两两之间的最短路最小值是多少? 思路 直接的想法 ...
- HDU 6166 Senior Pan(多校第九场 二进制分组最短路)
题意:给出n个点和m条有向边(有向边!!!!我还以为是无向查了半天),然后给出K个点,问这k个点中最近的两点的距离 思路:比赛时以为有询问,就直接丢了,然后这题感觉思路很棒,加入把所有点分成起点和终点 ...
- hdu 6169 Senior PanⅡ Miller_Rabin素数测试+容斥
Senior PanⅡ Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) Pr ...
- 2017多校第9场 HDU 6169 Senior PanⅡ 数论,DP,爆搜
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6169 题意:给了区间L,R,求[L,R]区间所有满足其最小质数因子为k的数的和. 解法: 我看了这篇b ...
随机推荐
- 测试leader职责
一. 负责软件产品/项目测试工作的组织 参加软件产品开发前的需求调研和分析 根据需求规格说明书,概要设计和开发计划编写项目总体测试计划,详细测试计划,测试大纲和测试文档结构表[测试计划 a.已上线产品 ...
- CSS 天坑 I - 字体单位
首先,本文所讨论的“坑”是在做回应式网页设计( Responsive Web Design 以下简称 RWD)时显现的,如果你还只是在做传统的Web设计这算不上是一个坑,因为传统的Web页面是死的,不 ...
- 《Effective Java》学习笔记 —— 通用程序设计
本章主要讨论局部变量.控制结构.类库.反射.本地方法的用法及代码优化和命名惯例. 第45条 将局部变量的作用域最小化 * 在第一次使用的它的地方声明局部变量(就近原则). * 几乎每个局部变量的声明都 ...
- python之GIL理解
GIL(Global Interpreter Lock) 全局解释器锁 python3中是假的多线程,它不是真正的并行,是利用了cpu上下文的切换而已.同一时间只能有一个线程使用共享数据,其它线程处于 ...
- twig用法
1. GyAdminBundle::base.html.twig 必须添加Bundle名才可引用模板
- 第二次Scrum meeting
第二次Scrum meeting 任务及其要求: 成员 12.11 12.12 陈谋 完成Tags的爬取工作(已完成) stackoverflow的问题抽取 卢惠明 视频链接的挖掘和整理(未完成) 视 ...
- Linux内核分析 NO.3
跟踪分析Linux内核的启动过程 于佳心 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002 ...
- mysql 访问不是本地数据库,给用户刷新了权限没有作用
1.grant all privileges on *.* to 'yangxin'@'%' identified by 'yangxin123456' with grant option; flus ...
- 《当大数据遇见网络:大数据与SDN》
总体结构: <当大数据遇见网络:大数据与SDN> 摘要 大数据和SDN无论是对于学术界还是工业界来说都极具吸引力.传统上人们都是分别在最前沿工作中研究这两个重要的领域.然而一方面,SDN的 ...
- Alpha 冲刺八
团队成员 051601135 岳冠宇 051604103 陈思孝 031602629 刘意晗 031602248 郑智文 031602234 王淇 会议照片 项目燃尽图 项目进展 完善各自部分 项目描 ...