热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HDU5876SparseGraph

题目大意:给你一个完全图让你删除给出的这些边形成新的图,问你在新的图上的s点到其它所有点的距离。解题思路:BFS乱搞补图的BFS的问

题目大意:

给你一个完全图让你删除给出的这些边形成新的图,问你在新的图上的s点到其它所有点的距离。

解题思路:

BFS乱搞...

补图的BFS的问题虽然很经典= =不过确实还是第一次做。很方。

用一个map来保存邻接的信息。因为最多20000,很坑的是比赛时候题面给的是5000

然后先从s来遍历所有点,如果邻接信息里面含有s到i的边,那么将i插入到set里面,并将dis[i]置为-1,如果不含有s到i的边,就将i插入队列,并将dis[i]置为1

然后依次访问队列里面的元素x,遍历set,如果set中的点y不具有一条x到y的边,那么就将这个点标记,取出set,然后更新dis[y]

当set为空的时候直接return。

其实set可以用链表代替不过用set可以偷懒...

大概思路就是这样。然后就可以解决这题了。

代码:

#include
#include
#include
#include
#include
using namespace std;const int maxm = 40005;
const int maxn = 200005;set ss;
map > mp;
int dis[maxn];void bfs(int s, int n) {queue q; ss.clear();while (!q.empty()) q.pop();for (int i &#61; 1; i <&#61; n; &#43;&#43;i) {if (i &#61;&#61; s) continue;if (mp[s][i]) {dis[i] &#61; -1;ss.insert(i);} else {dis[i] &#61; 1;q.push(i);}}int cnt &#61; ss.size();while (!q.empty()) {int x &#61; q.front(); q.pop();for (set::iterator it &#61; ss.begin(); it !&#61; ss.end(); &#43;&#43;it) {int y &#61; *it;if (dis[y] !&#61; -1 || mp[x][y]) continue;dis[y] &#61; dis[x] &#43; 1;q.push(y);--cnt;}if (!cnt) return;}
}
int main() {int n, m, s, u, v, t;while (~scanf("%d", &t)) {while (t--) {mp.clear();scanf("%d%d", &n, &m);while (m--) {scanf("%d%d", &u, &v);mp[u][v] &#61; mp[v][u] &#61; 1;}scanf("%d", &s);bfs(s, n);int cnt &#61; 0;for (int i &#61; 1; i <&#61; n; &#43;&#43;i) {if (i &#61;&#61; s) continue;&#43;&#43;cnt;printf("%d%c", dis[i], (cnt &#61;&#61; n - 1) ? &#39;\n&#39; : &#39; &#39;);}}}return 0;
}



转载于:https://www.cnblogs.com/wiklvrain/p/8179356.html


推荐阅读
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • 洛谷 P4009 汽车加油行驶问题 解析
    探讨了经典算法题目——汽车加油行驶问题,通过网络流和费用流的视角,深入解析了该问题的解决方案。本文将详细阐述如何利用最短路径算法解决这一问题,并提供详细的代码实现。 ... [详细]
  • 题目编号:2049 [SDOI2008]Cave Exploration。题目描述了一种动态图操作场景,涉及三种基本操作:断开两个节点间的连接(destroy(a,b))、建立两个节点间的连接(connect(a,b))以及查询两节点是否连通(query(a,b))。所有操作均确保图中无环存在。 ... [详细]
  • 题目描述:计算从起点到终点的最小能量消耗。如果下一个单元格的风向与当前单元格相同,则消耗为0,否则为1。共有8个可能的方向。 ... [详细]
  • 本文详细介绍了如何在循环双链表的指定位置插入新元素的方法,包括必要的步骤和代码示例。 ... [详细]
  • 本文探讨了在UIScrollView上嵌入Webview时遇到的一个常见问题:点击图片放大并返回后,Webview无法立即滑动。我们将分析问题原因,并提供有效的解决方案。 ... [详细]
  • 本文旨在探讨Swift中的Closure与Objective-C中的Block之间的区别与联系,通过定义、使用方式以及外部变量捕获等方面的比较,帮助开发者更好地理解这两种机制的特点及应用场景。 ... [详细]
  • 一、使用Microsoft.Office.Interop.Excel.DLL需要安装Office代码如下:2publicstaticboolExportExcel(S ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 题目概述:Sereja 拥有一个由 n 个整数组成的数组 a1, a2, ..., an。他计划执行 m 项操作,这些操作包括更新数组中的特定元素、增加数组中所有元素的值,以及查询数组中的特定元素。 ... [详细]
  • 数据输入验证与控件绑定方法
    本文提供了多种数据输入验证函数及控件绑定方法的实现代码,包括电话号码、数字、传真、邮政编码、电子邮件和网址的验证,以及报表绑定和自动编号等功能。 ... [详细]
  • 在开发过程中,有时需要提供用户创建数据库的功能。本文介绍了如何利用 .NET 和 ADOX 在应用程序中实现创建 Access 数据库,并详细说明了创建数据库及表的具体步骤。 ... [详细]
  • c语言二元插值,二维线性插值c语言
    c语言二元插值,二维线性插值c语言 ... [详细]
  • 本文提供了一个使用C语言实现的顺序表区间元素删除功能的完整代码示例。该程序首先初始化一个顺序表,然后根据用户输入的数据进行插入操作,最后根据指定的区间范围删除相应的元素,并输出最终的顺序表。 ... [详细]
  • 本文详细介绍了二叉堆的概念及其在Java中的实现方法。二叉堆是一种特殊的完全二叉树,具有堆性质,常用于实现优先队列。 ... [详细]
author-avatar
516837745_d2d52c
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有