HDU - 5876 Sparse Graph (补图的最短路)

该博客讨论了如何在给定稀疏图的情况下,高效地求解其补图的最短路径问题。由于点的数量远大于边,直接构建补图不实际。作者提出了使用两个集合来动态维护能到达和不能到达的点,通过迭代更新这两个集合,确定补图中由当前边构成的边,并相应增加距离。这种方法巧妙地避免了直接构建补图的复杂性。
摘要由CSDN通过智能技术生成

题意 : 就是给你一个图求他补图的最短路是多少。

思路: 首先他的点很多,但是边很少,我们不可能根据这个图去构建他的补图,因为点有20w不管怎样都不合适,

那我们就要换一个思路了,就是我们用两个set,第一个set维护一个当前点不能到达的所有点,第二个set表示的是当前点可以到达的所有点,那么我们每次看,如果当前点可以到达的点在第一个set里面我们就吧这个点抹去,把他加入到第二个set里面(点v在第一个set里面出现过就表明当前点u可以到达v,那么就把v抹去,放到第二个set里面),那么放在第一个set里的点肯定都是补图中的和当前边构成的边,那么我们让他+1 就好了,讲的不是很清楚,看代码吧

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <set>
#include <queue>
#define inf 0x7f7f7f
using namespace std;
const int maxn = 200010;
struct node
{
	int nex,to;
}edg[maxn * 4];
int  cnt = 0 ,head[maxn],dist[maxn],n,m;
set<int>aa;set<int>bb;  //aa 可以从起点到达的点,bb不能到达的点 
queue<int>que;
void init()
{
	aa.clear(),bb.clear();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值