题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5876

题意:有一个含有n个点的无向图,已知图的补图含有m条边u, v;求在原图中,起点s到其他n-1个点的最短距离,默认边的距离为1;

由于点的个数较大,不能建原图,只能从补图入手;从起点s开始,与s不直接相连的点的最短距离是1,然后再从这些点开始搜,循环即可,用队列表示,队列空了就结束了;

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#include<set>
using namespace std;
#define met(a, b) memset(a, b, sizeof(a))
#define N 400005
#define INF 0x3f3f3f3f
typedef long long LL; vector<vector<int> >G;
int dist[N]; void bfs(int s, int n)
{
set<int> s1, s2;
for(int i=; i<=n; i++)
{
if(i!=s) s1.insert(i);
dist[i] = INF;
}
queue<int>Q;
Q.push(s);
dist[s] = ; while(Q.size())
{
int p = Q.front();Q.pop();
for(int i=,len=G[p].size(); i<len; i++)
{
int q = G[p][i];
if(s1.find(q) == s1.end())continue;///判断q点是否已经确定距离了;
s1.erase(q);
s2.insert(q);
}
set<int>::iterator it;
for(it=s1.begin(); it!=s1.end(); it++)///那些到达不了的点都是可以由p点到达的;
{
dist[*it] = dist[p] + ;
Q.push(*it);
}
s1.swap(s2);///交换s2和s1;
s2.clear();
}
} int main()
{
int T;
scanf("%d", &T);
while(T--)
{
int n, m, start;
scanf("%d %d", &n, &m);
G.clear();
G.resize(n+);
for(int i=; i<=m; i++)
{
int u, v;
scanf("%d %d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
scanf("%d", &start);
bfs(start, n);
int f = ;
for(int i=; i<=n; i++)
{
if(i == start) continue;
f++;
if(dist[i] == INF) dist[i] = -;
printf("%d%c", dist[i], f == n-?'\n':' ');
}
}
return ;
}

最新文章

  1. MySQL插入语句解析
  2. C#封装好的Win32API
  3. ruby -- 基础学习(二) 外键配置实现级联删除
  4. HDU2204 Eddy&#39;s爱好(容斥原理)
  5. Uva 10305 - Ordering Tasks 拓扑排序基础水题 队列和dfs实现
  6. 分析ECMall的注册与登录机制
  7. VMware Ubuntu安装详细过程
  8. 富文本编辑器CKEDITOR的使用配置(问题注解)
  9. Asp.Net调用Office组件操作时的DCOM配置 (转)
  10. Android OpenGL ES(一)OpenGL ES介绍
  11. Linux的运行级别详细说明
  12. JAVA_SE基础——20.数组的常见操作
  13. BootStrap:轮播插件
  14. ViewPager刷新原理
  15. 关于python的感想和turtle作图
  16. js取指定范围随机值【原】
  17. django 表单使用
  18. suoi21 高能显示屏 (cdq分治)
  19. struts2 中 paramsPrepareParamsStack 拦截器
  20. Redis入门到高可用(九)——无序set

热门文章

  1. MONO 说谈
  2. ubuntu14.04美化
  3. POJ 1691 Painting A Board(迭代深搜)
  4. 常用正则表达式(?i)忽略字母的大小写!
  5. C++ &#39;dynamic_cast&#39; and Java &#39;instanceof&#39; 使用对比
  6. 为什么我不再用 .NET 框架(转)
  7. Web 在线文件管理器学习笔记与总结(1)初始文件以及获取首层目录信息
  8. 【翻译】CEDEC2012 SQUARE ENIX GPGPU实现高速GI烘培工具的方法
  9. Web 软件测试 Checklist 应用系列,第 1 部分: 数据输入
  10. PHPSTORM/IntelliJ IDEA 常用 设置配置优化