hdu_5876_Sparse Graph(补图BFS)
附上叉姐的题解:
1009 Sparse Graph [by ftiasch]
题意:n 个点的无向完全图中删除 m 条边,问点 s 到其他点的最短路长度。
题解:
补图上的 BFS 是非常经典的问题。一般的做法是用链表(或者偷懒用 std::set)维护还没 BFS 过的点。当要扩展点 u 的时候,遍历一次还没访问过的点 v,如果 uv 没边,那么将 v 入队。否则将 v 留在未扩展点中。
很明显,后者只会发生 m 次,前者只会发生 n 次,所以复杂度是 O(n + m)O(n+m).
#include<bits/stdc++.h>
#define F(i,a,b) for(int i=a;i<=b;i++)
using namespace std; const int N=2e5+,M=,inf=2e6+;
int t,n,m,ed,v[M],nxt[M],g[N],x,y,S,d[N]; void adg(int x,int y){v[++ed]=y,nxt[ed]=g[x],g[x]=ed;} void fuck()
{
set<int>ta,tb;
set<int>::iterator it;
queue<int>Q;
F(i,,n)d[i]=inf;
d[S]=,Q.push(S);
F(i,,n)if(i!=S)ta.insert(i);
while(!Q.empty())
{
int now=Q.front();Q.pop();
for(int i=g[now];i;i=nxt[i])if(ta.find(v[i])!=ta.end())ta.erase(v[i]),tb.insert(v[i]);
for(it=ta.begin();it!=ta.end();it++)Q.push(*it),d[*it]=d[now]+;
ta.swap(tb),tb.clear();
}
F(i,,n)if(i!=S)printf("%d%c",d[i]==inf?-:d[i]," \n"[i==n]);
} int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m),ed=;
F(i,,n)g[i]=;
F(i,,m)scanf("%d%d",&x,&y),adg(x,y),adg(y,x);
scanf("%d",&S),fuck();
}
return ;
}
hdu_5876_Sparse Graph(补图BFS)的更多相关文章
- [Algorithms] Graph Traversal (BFS and DFS)
Graph is an important data structure and has many important applications. Moreover, grach traversal ...
- HDU 5876 Sparse Graph(补图上BFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5876 题意: 有一个 n 个点无向图,再给你 m 对顶点, 代表着这 m 对顶点之间没有边, 除此之外 ...
- hdu 5876 (补图BFS) Sparse Graph
题目:这里 题意: 相当于一开始给一个初始好了的无向完全图给你,然后给让你删除m条边,再给你一个点v,最后问你在剩下的图里从这个点v出发能到达所有边点的最小路径是多少? 一看是所有点的最小路径,一看就 ...
- HDU 5876:Sparse Graph(BFS)
http://acm.hdu.edu.cn/showproblem.php?pid=5876 Sparse Graph Problem Description In graph theory, t ...
- 【BZOJ】1098: [POI2007]办公楼biu(补图+bfs+链表)
http://www.lydsy.com/JudgeOnline/problem.php?id=1098 显然答案是补图连通块..... 想到用并查集...可是连补图的边都已经...n^2了...怎么 ...
- 2017ICPC南宁赛区网络赛 Minimum Distance in a Star Graph (bfs)
In this problem, we will define a graph called star graph, and the question is to find the minimum d ...
- POJ-2415 Hike on a Graph (BFS)
Description "Hike on a Graph" is a game that is played on a board on which an undirected g ...
- 补图BFS(hdu 5876)
题目大意: 给出一个图和起点S,求补图中S到其他点的最短距离. http://acm.hdu.edu.cn/showproblem.php?pid=5876 我自己的垃圾做法: 用线段树来维护dijk ...
- algorithm@ find the shortest path in a graph using BFS
Finding Shortest Paths By BFS
随机推荐
- iOS 加载Image的两种方式
Apple官方文档对于加载image提供了两个方法 + (nullable UIImage *)imageNamed:(NSString *)name; + (nullable UIImage *)i ...
- CoreJavaE10V1P3.2 第3章 Java的基本编程结构-3.2 注释
3.2 注释 1. //形式注释 System.out.println("We will not use 'Hello, World!'"); // is this too cut ...
- NullSafe 的原理
摘要 NullSafe is a simple category on NSNull that returns nil for unrecognised messages instead of thr ...
- iOS ARC与MRC混编的一些解决方法
1. ARC & MRC 混合开发 在项目开发中,遇到使用MRC开发的第三方库怎么办? 例如:ASI 1> 尝试使用Xcode的转换工具(失败率比较高) 2> 在编译选项中,为MR ...
- 最近一段OI学习计划
1.在寒假的时间里尽量吧图论和DP的基础先学一下: 图论:数,二叉树,DFS.BFS遍历,然后最短路径(Floyd.dijkstra.SPFA),然后再最小生成树吧,如果还有时间的话(kruskal( ...
- Qt 解压/压缩文件
很久没有在博客园写随笔了,今天项目需要解压和压缩文件,所以去了解哈. 参考的是大神的代码:https://yq.aliyun.com/articles/24428. 使用的是 QuaZIP类. 类 说 ...
- ViewPager和View的事件响应规则
案例背景: 当我们实现viewpager的自动切换界面操作的时候,如果需要增加点击图片viewpager停止自动切换,松开手指viewpager自动切换又继续执行的逻辑,正常思维下实现代码如下所示: ...
- iOS GCD基础篇 - 同步、异步,并发、并行的理解
1.关于GCD - GCD全称是Grand Central Dispatch - GCD是苹果公司为多核的并行运算提出的解决方案 - GCD会自动利用更多的CPU内核(比如双核.四核) - GC ...
- 洛谷-均分纸牌-NOIP2002提高组复赛
题目描述 Description 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸 ...
- MySQL数据库的数据备份和恢复(导入和导出)命令操作语法【转】
不管是Oracle数据库还是SQL Server数据库,每个数据库都有自己的一套数据备份和恢复的方法,MySQL数据库也不例外.MySQL数据库备份和恢复用到了两个命令,分别是“mysqldump”和 ...