1、HDU 5876  Sparse Graph

2、总结:好题,把STL都过了一遍

题意:n个点组成的完全图,删去m条边,求点s到其余n-1个点的最短距离。

思路:把点分为两个集合,A为所有没有到达过的点,B为当前不可到达的点,每次拓展A中可到过的点加入队列。

#include<iostream>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<set>
#define F(i,a,b) for (int i=a;i<b;i++)
#define FF(i,a,b) for (int i=a;i<=b;i++)
#define mes(a,b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define LL long long
using namespace std;
const int N=200010,MAX=1000100;int n,m,dis[N];
vector<int >vec[N];void bfs(int s)
{mes(dis,0);set<int >A,B;FF(i,1,n)if(i!=s)A.insert(i);queue<int >qu;qu.push(s);while(!qu.empty()){int u=qu.front();qu.pop();for(int i=0;i<vec[u].size();i++){      //注:vec从0开始int v=vec[u][i];if(A.count(v)){A.erase(v);     //集合删除、插入
                B.insert(v);}}for(set<int >::iterator it=A.begin();it!=A.end();it++){    //注:it!=A.end()结尾dis[*it]=dis[u]+1;      //注:*itqu.push(*it);}A.swap(B);      //集合交换
        B.clear();}
}int main()
{int t;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);FF(i,0,n)vec[i].clear();    //注:vec[i].clear()while(m--){int u,v;scanf("%d%d",&u,&v);vec[u].push_back(v);vec[v].push_back(u);}int s;scanf("%d",&s);bfs(s);int flag=0;FF(i,1,n){if(i!=s){if(flag)printf(" ");else flag=1;printf("%d",dis[i]);}}printf("\n");}return 0;
}

View Code

转载于:https://www.cnblogs.com/sbfhy/p/5917585.html

HDU 5876 关于补图的bfs相关推荐

  1. 专题训练二 搜索进阶 HDU - 3085 Nightmare Ⅱ (双向BFS + 曼哈顿距离)

    HDU - 3085 Nightmare Ⅱ (双向BFS + 曼哈顿距离) Problem Description Last night, little erriyue had a horrible ...

  2. HDU - 5876 Sparse Graph 2016 ACM/ICPC 大连网络赛 I题 bfs+set+补图最短路

    题目链接 题意:给的补图,让你求一个源点到其他点的最短距离,因为图太稠密了, 用dij以及spfa根本不得行,这里只能用一种我不会方法来进行,这里用了bfs的方法以及set来维护,分别set维护一个未 ...

  3. 【HDU - 5876】Sparse Graph(补图bfs,STLset)

    题干: In graph theory, the complementcomplement of a graph GG is a graph HH on the same vertices such ...

  4. HDU - 5876 Sparse Graph(bfs+set)

    题目链接:点击查看 题目大意:给定一个无向图G,规定H为G的补图,求在H上关于点s的单源最短路 题目分析:因为H是G的补图,所以可以用整个图减去G得到H,然后对H跑一边迪杰斯特拉,可是整个图最多能达到 ...

  5. HDU 5836 Rubik's Cube BFS

    Rubik's Cube 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5836 Description As we all know, Zhu is ...

  6. HDU 1043 Eight(双向BFS+康托展开)

    http://acm.hdu.edu.cn/showproblem.php?pid=1043 题意:给出一个八数码,求出到达指定状态的路径. 思路:路径寻找问题.在这道题里用到的知识点挺多的.第一次用 ...

  7. HDU(1175),连连看,BFS

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1175 越学越不会,BFS还是很高级的. 连连看 Time Limit: 20000/100 ...

  8. HDU 1728 逃离迷宫(BFS的优化)

    这一题,有两个地方需要注意:(除了题目令人窒息的行列的x y设置) ①转弯如何判断? 需要给转弯的方向赋值.通常,我们在节点向四个方向延伸的时候,喜欢这样 int nextx[4]={0,0,-1,1 ...

  9. HDU 1495 非常可乐(数论,BFS)

    非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

最新文章

  1. C语言指针函数MFC版Demo
  2. 建立海盗的天堂:盗贼之海的AI(一)
  3. No projects are found to import
  4. ajax失败的原因,使用https协议失败的ajax请求失败的可能原因但http工作
  5. linux线程调度与rtos,实时Linux和RTOS的基本特性及技术进行比较
  6. span的title标签中的换行
  7. matlab 例题sin,matlab基础练习题(带答案).doc
  8. Matlab版本svm工具箱,matlab libsvm工具箱
  9. 美团获得小样本学习榜单FewCLUE第一!Prompt Learning+自训练实战
  10. 途家供应链系统架构演进实践
  11. Linux中有play命令吗,linux play命令
  12. 设计模式之十一个行为型模式的相关知识,简单易懂。
  13. ppt模板如何制作个性人物海报?
  14. 使用signature在移动端做电子签名canvas画板随触摸滚屏的bug
  15. 手机打字软件如何测试打字快,手机打字学好拼音最笨的方法 手机打字怎么练才能快...
  16. CreateJS 制作 H5 长图动画
  17. Maven配置阿里云HTTPS镜像地址
  18. 嵌入式软件测试的基本方法
  19. 通讯协议和通讯方式概述
  20. 一文讲明白互联网如何去中心化

热门文章

  1. 【opencv】【mediapipe】手势检测的有趣玩法
  2. 【opencv学习】【Canny边缘检测】
  3. [深度学习-优化]dropout防止过拟合的理解
  4. ubuntu下kaldi的安装以及实例的运行
  5. leetcode —— 654. 最大二叉树
  6. C/C++中的关键字
  7. OGNL表达式的特殊的符号
  8. 算法竞赛中的时间复杂度选择——以最大连续和问题为例
  9. [gtest][002] A quick start to build the Google C++ Testing project
  10. jboss怎么连接Oracle数据库,如何在Jboss中配置数据源