hdu 6166 Senior Pan 最短路

HDU6166 Senior Pan 解题报告【图论】【SPFA最短路】【随机】 HDU 6166 阅读详情


Senior Pan

Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 179    Accepted Submission(s): 45


Problem Description
Senior Pan fails in his discrete math exam again. So he asks Master ZKC to give him graph theory problems everyday.
The task is simple : ZKC will give Pan a directed graph every time, and selects some nodes from that graph, you can calculate the minimum distance of every pair of nodes chosen in these nodes and now ZKC only cares about the minimum among them. That is still too hard for poor Pan, so he asks you for help.
 

Input
The first line contains one integer T, represents the number of Test Cases.1≤T≤5.Then T Test Cases, for each Test Cases, the first line contains two integers n,m representing the number of nodes and the number of edges.1≤n,m≤100000
Then m lines follow. Each line contains three integers  xi,yi  representing an edge, and  vi  representing its length.1≤ xi,yi ≤n,1≤ vi ≤100000
Then one line contains one integer K, the number of nodes that Master Dong selects out.1≤K≤n
The following line contains K unique integers  ai , the nodes that Master Dong selects out.1≤ ai ≤n, ai !=aj
 

Output
For every Test Case, output one integer: the answer
 

Sample Input
  
1 5 6 1 2 1 2 3 3 3 1 3 2 5 1 2 4 2 4 3 1 3 1 3 5
 

Sample Output
  
Case #1: 2
 

Source
 

Recommend
liuyiding   |   We have carefully selected several similar problems for you:   6170  6169  6168  6167  6166 
 

Statistic |  Submit |  Discuss |  Note
题意:给你一个有向图,然后给你k个点,求其中一个点到另一个点的距离的最小值。

思路:恩。。。官方题解说的有点不清楚,搞得我斟酌了好一会大概知道他想说什么了。。首先一个集合到另一个集合的最短路径是可以一遍dijkstra算出来的。这个如果想不通最短路没过关。然后任意两个点在二进制表示上肯定至少有一位是不相同的,所以只要枚举二进制的位数,把k个点分成两个集合,跑logn次dijkstra就能把全部情况跑出来。。大概就这样,想通了的话代码是很好写的。下面给代码:

#pragma comment(linker, "/STACK:102400000,102400000") 
#include<iostream>  
#include<cmath>  
#include<queue>  
#include<cstdio>  
#include<queue>  
#include<algorithm>  
#include<cstring>  
#include<string>  
#include<utility>
#include<set>
#include<map>
#include<stack>
#include<vector>
#define maxn 100005
#define inf  0x3f3f3f3f3f3f3f3f
using namespace std;
typedef long long LL;
const double eps = 1e-5;
const int mod = 1e9+7;
struct Edge{
	int v, val,next;
}p[maxn];
struct node{
	int x;
	LL step;
};
int head[maxn], len, a[maxn], mark[maxn];
LL vis[maxn];
priority_queue<node>q;
bool operator<(node a, node b){
	return a.step > b.step;
}
void addedge(int u, int v,int val){
	p[len].v = v;
	p[len].val = val;
	p[len].next = head[u];
	head[u] = len++;
}
LL dijkstra(){
	while (!q.empty()){
		node now = q.top();
		q.pop();
		if (mark[now.x])
			return now.step;
		for (int i = head[now.x]; ~i; i = p[i].next){
			int next = p[i].v;
			if (vis[next] > now.step + p[i].val){
				vis[next] = now.step + p[i].val;
				q.push(node{ next, vis[next] });
			}
		}
	}
	return inf;
}
void init(){
	memset(vis, inf, sizeof(vis));
	memset(mark, 0, sizeof(mark));
	while (!q.empty())
		q.pop();
}
LL solve(int k){
	LL ans = inf;
	for (int i = 0; i < 20; i++){
		init();
		for (int j = 0; j < k; j++){
			if (a[j] & (1 << i)){
				q.push(node{ a[j], 0 });
				vis[a[j]] = 0;
			}
			else
				mark[a[j]] = 1;
		}
		ans = min(ans, dijkstra());
		init();
		for (int j = 0; j < k; j++){
			if (a[j] & (1 << i))
				mark[a[j]] = 1;
			else{
				q.push(node{ a[j], 0 });
				vis[a[j]] = 0;
			}	
		}
		ans = min(ans, dijkstra());
	}
	return ans;
}
int main(){
	int t;
	scanf("%d", &t);
	for (int tcase = 1; tcase <= t;tcase++){
		memset(head, -1, sizeof(head));
		len = 0;
		int n, m;
		scanf("%d%d", &n, &m);
		while (m--){
			int u, v, w;
			scanf("%d%d%d", &u, &v, &w);
			addedge(u, v, w);
		}
		int k;
		scanf("%d", &k);
		for (int i = 0; i < k; i++)
			scanf("%d", &a[i]);
		printf("Case #%d: %lld\n", tcase, solve(k));
	}
}


零代码构建AI智能体:COZE可视化工作流实战指南 AI智能体(AI Agent)是当前人工智能领域的重要发展方向,它通过模块化设计和工作流驱动,使大语言模型从被动对话转向主动执行。其核心原理在于将复杂的任务分解为可规划、可执行的步骤,并调用外部工具(插件)完成闭环。这一技术价值在于显著降低了自动化流程的开发门槛,让非程序员也能构建实用的数字助手。典型的应用场景包括智能客服、内容自动生成、数据分析和跨系统业务流程自动化。本文以COZE平台为例,深入解析如何通过其直观的可视化界面和丰富的插件生态,像搭积木一样快速搭建如“早安简报生成器”等实用智能体,并分享指令 阅读详情

相关推荐

BIM Revit教程(六)尝试安装 Revit 时显示“Autodesk Revit 已安装。”

在安装Revit或RevitLT时,若系统提示“AutodeskRevit版本已安装”,通常是由于旧版本残留文件未完全清除所致。解决方案包括:1.通过控制面板或Windows设置卸载旧版本Revit,确保所有相关组件被移除;2.使用Autodesk卸载工具(AdskUninstallHelper)进一步清理;3.谨慎操作注册表,删除与Revit相关的残留项;4.确保系统有至少30GB的可用磁盘空间;5.完成上述步骤后,重新尝试安装Revit。此外,文章还提到了一个免费功能商店,供用户寻找提效工具,并鼓励粉丝

ZOZO_888的博客 2129

hdu6166-最短路&二进制枚举-Senior Pan

http://acm.hdu.edu.cn/showproblem.php?pid=6166 给定一个有向图,再给你一个集合。问这些集合中 两个点之间相互的最短路距离最小是多少。 思路:集合中每个数二进制都有一位不相同, 所以通过枚举二进制可以保证 包含了所有 两两枚举的情况。 然后dij的思路 就是通过 贪心+集合+有限的松弛操作 来搞事情的。 所以也可以计算集合之间的最短路,(学了一招

天与云与山与水 398

本地部署 Anything LLM+Ollama+DeepSeek R1 大模型并实现外部访问

DeepSeek 一经发布就引起社会的广泛的关注,因为 DeepSeek 的价格低廉,性能卓越,提供了多种使用方式,满足不同用户的需求和场景。本文将详细的介绍如何在本地 Windows 上安装部署 Anything LLM + Ollama 来实现用户和 DeepSeek-r1 对话的功能以及利用路由侠内网穿透实现外网访问。

lyxnwct的博客 1896

hdu6166 最短路

传送门 题意:在一个有向图中,选出K个点,问任意两个点的最短距离中 最小的那个是多少。 因为K太大了,不能枚举任意两个点的距离,所以需要一些技巧,分组!,将所有点分成两组,设为A,B组,那么我们用优先队列求解,初始把所有A组点加入队列,以远离初始点距离最短的优先,A组中所有点一旦走到B组任意一个点,便找到了从A组到B组的一条最短路,我们要做的关键地方是分组,如何使得任意两个点都有一次机会不在同一

猿的进化 649

WhatsApp协议算法

我想其实有很多人还不太了WhatsApp群控,简单来说,它和我们常使用的微信聊天软件是类似的,只不过它是基于通讯录的,操作起来比较简单便捷,所以现在有很多国家都喜欢用WhatsApp。一般情况下,筛号不会造成账号被封的情况,但是呢,如果筛号的频率太快,就会被系统限制筛号能力,不再返回筛号结果,所以,筛号数量和速度一定要控制好。前天逛街突然灵光一现,为什么不试试多路访问呢,简单来说就是信道复用技术,马上跑回家,调取接口,接入通道,导入已经转换成协议的账号,成功登录!

2403_87755661的博客 1943

全网最新首发纯干货:微信数据库表结构完整分析(一)

找不到微信DB表结构说明?找不到具体字段的解释?来这里,全网最完整版!!!

killghosts的博客 4926

HDU - 6166

题目链接:HDU - 6166 显然,如果我们把K个点可以分成两组,那么我们直接最短路就可以求出一组到另一组之间的最短路。 所以我们怎么分组才能尽量少的分组,使得任意两点一定会某一时刻存在不同集合呢?二进制分组。只需要分组log次。 然后因为是,有向图,分组的两种情况都需要跑一次最短路。 这个是稀疏图,spfa会比Dijkstra快很多。 AC代码: #pragma GCC optimize(...

青烟绕指柔的博客 634

保姆级教程:在RK3588平台上为IMX415 Sensor配置HDR2曝光(附完整代码与避坑点)

本文提供RK3588平台上为IMX415 Sensor配置HDR2曝光的详细教程,涵盖基础概念、限制条件、实战配置步骤及常见问题解决方案。通过完整代码示例和关键参数解析,帮助开发者高效实现HDR2曝光模式,提升图像质量并避开常见陷阱。

weixin_28685287的博客 283

【题解】HDU6166:Senior Pan

原题传送门 这是一种

ModestCoder_的博客 419

安装anaconda3时出现错误:Failed to link extracted packages to D:\anaconda!...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1479

计算机视觉教程1-1:透视空间与透视变换

在生活中,透视现象很常见,其物理本质是光的直线传播。由于人眼与相机在捕获图像时均存在透视现象,因此计算机几何基于透视空间进行研究。本节介绍透视变换原理

FRIGIDWINTER的博客 3091

hdu 6166 Senior Pan

http://acm.hdu.edu.cn/showproblem.php?pid=6166 题意: 给出一张无向图,给定k个特殊点 求这k个特殊点两两之间的最短路 二进制分组 枚举一位二进制位 这一位为1的放到起点集合 这一位为0的放到终点集合 跑一遍两个集合间的最短路 因为是有向图,反过来再跑一遍 正确性分析: 设最优解是x和y间的最短路 若x和y被分...

weixin_34293141的博客 154

【功能安全】【AutoSAR】程序流监控机制

目录 一、程序流执行的常见故障 二、程序流的监控机制 1、监控功能的实现 2、三种监督机制 a、生命监测机制 b、截止时间监测机制 c、逻辑程序流监测机制 一、程序流执行的常见故障 与程序流相关的故障,在ISO26262中第六章附录D中定义如下: — 执行阻塞; — 死锁; — 活锁; — 执行时间的不正确分配; — 软件要素间的不正确同步。 二、程序流的监控机制 1、监控功能的实现 AutoSAR中对程序流的监控功能的实现主要有“看门狗”栈(Watchdog Stack).

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 4518

hdu 6166 Senior Pan(最短路)

Senior Pan Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 272    Accepted Submission(s): 80 Problem Description Senior Pan fail

MR CODER 775

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

HDU 6166 Senior Pan 【二进制分组,最短路】

题目链接 题意 给出一张有向图,求其中 KKK 个点之间的最短路 显然求 KKK 次最短路会超时,可以换个角度思考。把KKK个点分成两个集合,同一集合内的点互相距离为0,最短路也就是这两个点集之间的最短路(最短路的两个端点不在同一个集合内)。 现在只需要考虑这个集合需要分多少次。从二进制的角度看,把集合KKK 中第 iii 位为 0 和为 1 的分为两个集合,这样对于无论最短路端点是哪两个,从第1位拆到第log(n)+1log(n)+1log(n)+1位,一定有一次会把他们拆到不同的集合。 每次对于两个集

qq_50554695的博客 304

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Senior Pan HDU - 6166 (两个集合的最短路)

Senior Pan HDU - 6166 Senior Pan fails in his discrete math exam again. So he asks Master ZKC to give him graph theory problems everyday. The task is simple : ZKC will give Pan a directed graph e...

nucleare的博客 268

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

[hdu6166]Senior Pan——顶点集合最短路+二进制划分

题目大意: 给定一个有向图和一个顶点的集合,求这些顶点两两构成的最短路的最小值。 思路: 考虑把这个集合给随机划分,最后的答案s->t有很大概率被划分到了两个不同的集合。 正解为二进制划分。 何谓二进制划分?即对于集合中的物品编号,之后枚举其二进制下的每一位,对于每一位,都作一次划分:这一位为1的放入一个集合,这一位为0的放入一个集合。 考虑这样的正确性,两个不同的物品的编号二进制...

aizhuji9626的博客 208

HDU 6166 Senior Pan(思维 最短路)

题目:点击打开链接 题意:给一个有向图,n个点,m条边。给k个其中的点,求这k个点相互之间的路径值的最小值是多少。 思路:如果是暴力枚举这k个点到其他k-1个点的最短路取最小值一定是超时的。 正确做法是每次将k个点划分成两个集合,求这两个集合的最短路,取最小值。划分的方法应该保证这k个点均相互求过最短路,且划分次数不应太多以免超时。 这道题最难想到的是对这k个点进行划分,这里方法是这样的:

Code change the World. 407

hdu6166—Senior Pan(二进制划分跑最短路)

题目链接:传送门 Senior Pan Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 381    Accepted Submission(s): 138 Problem Description

zhiyuanjiang的博客 435

Senior Pan HDU - 6166 最短路+思维

题目链接https://vjudge.net/problem/HDU-6166参考http://blog.youkuaiyun.com/qq_33362864/article/details/77494173题意:给一个有向图,n个点,m条边。给k个其中的点,求这k个点相互之间的路径值的最小值是多少。这道题最难想到的是对这k个点进行划分,这里方法是这样的:将这k个点用二进制来划分。首先两个不相同的数,其二进制一

now_ing的博客 1064

HDU 6166 Senior Pan (最短路变形)

题目链接 Problem Description Senior Pan fails in his discrete math exam again. So he asks Master ZKC to give him graph theory problems everyday.The task is simple : ZKC will give Pan a directed gra...

185

HDU 6166 Senior Pan 【二进制分组最短路 】 好题

传送门 //题意: n个点m条边的有向图, 给出询问的k个点, 问这k个点中最短路径是多少. //思路: 有个最明显的思路就是加一个超级源点S和超级汇点T, 然后连接询问的那些点, 然后跑一遍最短路即可, 问题就是万一同时连接到了一个点, 那怎么算最短路了, 我们可以知道这些点可以分为两个集合, 一个是起点集合, 一个是终点集合, 而我们的目的就是把正确的点放在相应的集合中, 这样答案一定就可

Anxdada -- 我等风来也等你 1076

HDU 6166 Senior Pan spfa(顶点集间最短路)

传送门:HDU6166 题意:给出一个有向图,并给出一个点集,请求出集合中的点任意两两之间的最短距离中最小的那个。 思路:当时xjb写了一发二分 + 爆搜,果不其然TLE。。 正解:戳这里戳这里 按照二进制位分组的思路真的是很巧妙啊。 代码: #include #define ll long long #define inf 0x3f3f3f3f using namespace std

WA是一笔财富 332

【二进制划分集合 最短路】HDU6166 Senior Pan

想通了就很神奇k个点,可以分为2个集合s1,s2 显然dijkstra一遍即可得到s1到s2的最小距离考虑枚举2进制的每一位 若第i位=1,则分进s1,否则分进s2 显然所有不同的pair组合都被包含了

Starry_starry_night的博客 668

Senior Pan HDU - 6166 (最短路咯)

Senior Pan fails in his discrete math exam again. So he asks Master ZKC to give him graph theory problems everyday. The task is simple : ZKC will give Pan a directed graph every time, and selects som

Coldfresh的博客 633

HDU 6166 Senior Pan (最短路 好题)

题意:给你一个n个点m条边的有向带边权的图。现在给你k个点,问k个点中最近的点对距离。 n, m, k 思路:这题的思路好强啊。。。任意两个点在二进制表示上肯定至少有一位是不相同的,所以我们可以枚举二进制的 位数,每次把k个点中二进制某一位为1的分一个集合,为0的分一个集合,做一次最短路,找到这两个集合之间的最 短路。枚举所有二进制的位数后,这样就包含了所有点对的最短路。(求集合与

CillyB的博客 535
上一篇: hdu 6148 Valley Numer 数位dp
下一篇: hdu 6171 Admiral 双向bfs+hash
overload1997
博客等级 码龄11年 328粉丝 210原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值