题目大意:

给出一个图和起点S,求补图中S到其他点的最短距离。

http://acm.hdu.edu.cn/showproblem.php?pid=5876

我自己的垃圾做法:

用线段树来维护dijkstra的dis数组。每次取出dis最小的点来更新其他点。 假设x连出去的边是y1 < y2 < y3 ... < yk.  那么对于dis[1, y1 - 1] [y1 + 1, y2 - 1] [y2 + 1, y3 - 1]...这些区间做区间取min操作。 比较容易出错的的地方是每次用x更新完其他点,需要把dis[x] 设置成INF, 对于一个区间,如果最小值就是INF,说明这个区间里的点都被扩展过了,直接return,而不能对它做取min操作。   因为需要做的取min操作是O(m)的,所以总的复杂度是O(mlogn).

简单做法:

用一个set维护哪些点还没被BFS到。 每次从队列取出一个点x, 然后把set里的点分成两类,一类是和x在原图中有边相连,一类是没有边相连,把和x没有边相连的点从set中删去,加入队列。  总的复杂度是O(mlogn)

参考代码:

 //#pragma comment(linker, "/STACK:102400000,102400000")#include <bits/stdc++.h>
//zoj 3496
#include <bits/stdc++.h>
using namespace std; typedef long long ll;
#define X first
#define Y second
#define MAXN 200020
#define M 105
const int mod = 1e9 + ;
const int INF = 1e9 + ; vector<int> E[MAXN];
int d[MAXN];
queue<int> Q;
set<int> st, tmp; void BFS(int S, int n)
{
Q.push(S); d[S] = ;
for (int i = ; i <= n; ++i)
if (i != S) st.insert(i);
while (!Q.empty())
{
int x = Q.front(); Q.pop();
tmp.erase(tmp.begin(), tmp.end());
for (auto y: E[x])
{
if (st.find(y) != st.end())
tmp.insert(y);
}
for (auto v: st) if (tmp.find(v) == tmp.end()) Q.push(v), d[v] = d[x] + ;
st = tmp;
}
bool flag = false;
for (int i = ; i <= n; ++i)
{
if (i == S) continue;
if (flag) printf(" ");
printf("%d", d[i]);
flag = true;
}
printf("\n");
} int main()
{
//freopen("input", "r", stdin);
//freopen("output", "w", stdout); int T, n, m;
scanf("%d", &T);
while (T--)
{
scanf("%d %d", &n, &m);
for (int i = ; i <= m; ++i)
{
int x, y;
scanf("%d %d", &x, &y);
E[x].push_back(y);
E[y].push_back(x);
}
int S;
scanf("%d", &S);
for (int i = ; i <= n; ++i) d[i] = -;
BFS(S, n);
for (int i = ; i <= n; ++i) E[i].clear();
} return ;
}

补图BFS(hdu 5876)的更多相关文章

  1. HDU 5876 关于补图的bfs

    1.HDU 5876  Sparse Graph 2.总结:好题,把STL都过了一遍 题意:n个点组成的完全图,删去m条边,求点s到其余n-1个点的最短距离. 思路:把点分为两个集合,A为所有没有到达 ...

  2. HDU 5876 Sparse Graph(补图上BFS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5876 题意: 有一个 n 个点无向图,再给你 m 对顶点, 代表着这 m 对顶点之间没有边, 除此之外 ...

  3. HDU 5876 Sparse Graph 【补图最短路 BFS】(2016 ACM/ICPC Asia Regional Dalian Online)

    Sparse Graph Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)To ...

  4. HDU - 5876 :Sparse Graph (完全图的补图的最短路 -BFS&set)

    In graph theory, the complement of a graph G is a graph H on the same vertices such that two distinc ...

  5. hdu 5876 (补图BFS) Sparse Graph

    题目:这里 题意: 相当于一开始给一个初始好了的无向完全图给你,然后给让你删除m条边,再给你一个点v,最后问你在剩下的图里从这个点v出发能到达所有边点的最小路径是多少? 一看是所有点的最小路径,一看就 ...

  6. HDU 5876 (大连网赛1009)(BFS + set)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5876 题意:给定一个图(n个顶点m条边),求其补图最短路 思路:集合a表示当前还未寻找到的点,集合b表 ...

  7. HDU 5876:Sparse Graph(BFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=5876 Sparse Graph Problem Description   In graph theory, t ...

  8. HDU 5876 Sparse Graph(补图中求最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=5876 题意: 在补图中求s到其余各个点的最短路. 思路:因为这道题目每条边的距离都是1,所以可以直接用bfs来做 ...

  9. HDU 5876 补图 单源 最短路

    ---恢复内容开始--- Sparse Graph Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (J ...

随机推荐

  1. liunx系统安装tomcat的方法

    安装tomcat前需要先安装jdk,安装jdk的方法参考我的上一篇文章:liunx系统安装jdk的方法 1.下载tomcat 下载地址:http://tomcat.apache.org/downloa ...

  2. WORD中无损复制图片

    问题 默认 Ctrl+C复制出来图片图片的严重模糊,复制出来的不是原图片!因为图片尺寸被修改后复制出来的则是模糊的 解决办法 解决办法把WORD中的图片恢复成默认的,如果对图片进行了缩放请把缩放比恢复 ...

  3. 解决tomcat提交的数据乱码的问题

    有时,开发过程中会遇到前端传入“中文”并返回时,会出现乱码!主要是因为前端通过tomcat7提交的数据就出现了乱码的问题,也就说根源在于tomcat7. 有2中方案解决该问题: (1)使用tomcat ...

  4. Win10注销在哪?怎么注销电脑

    进入Win10电脑桌面,同时按住键盘上的[Alt]+[F4]组合快捷键,可以快速呼出[关闭Windows]操作选项,在下面的"您希望计算机所什么"里选择[注销],然后点击底部的[确 ...

  5. angular -- $resource 用法

    安装 ngResource模块是一个可选的angularjs模块,如果需要使用,我们要单独引用js <script type="text/javascript" src=&q ...

  6. jQuery中的append()和prepend(),after()和before()的差别

    jQuery中的append()和preappend(),after()和before()的差别 append()和prepend() 如果 <div class='a'> //<- ...

  7. Hibernate配置C3P0连接池

    引入C3PO包 在hibernate.cfg.xml文件中配置 <!-- 数据库连接池的使用 --> <!-- 选择使用C3P0连接池 --> <property nam ...

  8. JS回调函数全解析教程(callback)

    自学jQuery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速google之,发现原来中文翻译成回调.也就是回调函数了.不懂啊,于是在google回调函数,发现网上的中文解释实在是 ...

  9. php fpm安装curl后,nginx出现connect() to unix:/var/run/php5-fpm.sock failed (13: Permission denied)的错误

    这里选择直接apt-get安装,因为比起自己编译简单多了,不需要自己配置什么 #sudo apt-get install curl libcurl3 libcurl3-dev php5-curl 安装 ...

  10. jq的form验证

    jQuery(document).ready(function(){ $('#cform img.contact-loader').hide(); $('#cform').submit(functio ...