HDU 5867 Sparse Graph (2016年大连网络赛 I bfs+补图)
题意:给你n个点m条边形成一个无向图,问你求出给定点在此图的补图上到每个点距离的最小值,每条边距离为1
补图:完全图减去原图
完全图:每两个点都相连的图
其实就是一个有技巧的bfs,我们可以看到虽然点很多但边很少,就使用vector存下每个点在原图中可以到达其他的哪些点,再使用bfs寻找此时起点可以到的其他点(每个距离都是1,所以越早到距离越短),接着更新起点继续查找:我们需要使用数组记录此时起点不能到的一些点(就是vector中原图起点可以到的点),但每次通过起点判断其他所有的点会超时,因此我们就是用一个队列存储还没到过的点,每次就直接寻找这些点可否由此时起点到达就好
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<string>
#include<cstdio>
#include<cstring>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define eps 1E-8
/*注意可能会有输出-0.000*/
#define Sgn(x) (x<-eps? -1 :x<eps? 0:1)//x为两个浮点数差的比较,注意返回整型
#define Cvs(x) (x > 0.0 ? x+eps : x-eps)//浮点数转化
#define zero(x) (((x)>0?(x):-(x))<eps)//判断是否等于0
#define mul(a,b) (a<<b)
#define dir(a,b) (a>>b)
typedef long long ll;
typedef unsigned long long ull;
const int Inf=<<;
const double Pi=acos(-1.0);
const int Mod=1e9+;
const int Max=;
vector<int> edge[Max];//可以连接的边
int vis[Max];//标记此时可否走
int ans[Max];
struct node
{
int npoi,step;
};
queue<node> bque;
queue<int> nque;//存下需要走到的点
void Init(int n)
{
while(!bque.empty())
bque.pop();
while(!nque.empty())
nque.pop();
for(int i=; i<=n; ++i)
{
ans[i]=-;
edge[i].clear();
vis[i]=;
}
return;
}
void Mark(int p,int f)//标记这些点可否走
{
int len=edge[p].size();
for(int i=; i<len; ++i)
vis[edge[p][i]]=f;
return;
}
void Bfs(int n,int s)//补图的bfs
{
int len=n-;
node tem,hh;
tem.step=,tem.npoi=s;
bque.push(tem);
vis[s]=;
while(!bque.empty())
{
tem=bque.front();
bque.pop();
Mark(tem.npoi,);//按照原图的边标记不能走
int tmp=len,tmp2;
while(tmp--)
{
tmp2=nque.front();//这些点都是没有走到的
nque.pop();
if(!vis[tmp2])
{
len--;
hh.step=tem.step+;
hh.npoi=tmp2;
bque.push(hh);
ans[tmp2]=hh.step;
}
else
nque.push(tmp2);
if(!len)
return;
}
Mark(tem.npoi,);
}
return;
}
int main()
{
int t,n,m;
int u,v,s;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&m);
Init(n);
for(int i=; i<m; ++i)
{
scanf("%d %d",&u,&v);
edge[u].push_back(v);
edge[v].push_back(u);
}
scanf("%d",&s);
for(int i=; i<=n; ++i)
if(i!=s)
nque.push(i);
Bfs(n,s);
int len=n-;
for(int i=; i<=n; ++i)
{
if(i!=s)
{
--len;
if(len)
printf("%d ",ans[i]);
else
printf("%d\n",ans[i]);
}
}
}
return ;
}
HDU 5867 Sparse Graph (2016年大连网络赛 I bfs+补图)的更多相关文章
- HDU 5875 Function (2016年大连网络赛 H 线段树+gcd)
很简单的一个题的,结果后台数据有误,自己又太傻卡了3个小时... 题意:给你一串数a再给你一些区间(lef,rig),求出a[lef]%a[lef+1]...%a[rig] 题解:我们可以发现数字a对 ...
- HDU 5877 Weak Pair (2016年大连网络赛 J dfs+反向思维)
正难则反的思想还是不能灵活应用啊 题意:给你n个点,每个点有一个权值,接着是n-1有向条边形成一颗有根树,问你有多少对点的权值乘积小于等于给定的值k,其中这对点必须是孩子节点与祖先的关系 我们反向思考 ...
- HDU 5901 Count primes (2016 acm 沈阳网络赛)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=5901 题意:输入n,输出n以内质数个数 模板题,模板我看不懂,只是存代码用. 官方题解链接:https ...
- HDU 5884 Sort(2016年青岛网络赛 G 二分+贪心+小优化)
好题 题意:给你n<=100000个数,每个数范围[0,1000],然后给你一个最大的代价T,每次最多合并k个数成为一个数,代价为k个数的总和.问最后合成1个数的总代价不大于T的最小k 题解:我 ...
- 2016 ICPC 大连网络赛 部分题解
先讲1007,有m个人,n种石头,将n种石头分给m个人,每两个人之间要么是朋友关系,要么是敌人关系,朋友的话他们必须有一种相同颜色的石头,敌人的话他们必须所有石头的颜色都不相同.另外,一个人可以不拥有 ...
- 大连网络赛 1006 Football Games
//大连网络赛 1006 // 吐槽:数据比较水.下面代码可以AC // 但是正解好像是:排序后,前i项的和大于等于i*(i-1) #include <bits/stdc++.h> usi ...
- 2016大连网络赛 Sparse Graph
Sparse Graph Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) P ...
- HDU 5876 大连网络赛 Sparse Graph
Sparse Graph Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) T ...
- 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 ...
随机推荐
- Linux(CentOS、Ububtu)一键安装Openstack及其它参考文档汇总
原文链接 http://www.aboutyun.com/thread-10920-1-1.html openstack相关资料 CentOS下一键安装Openstack http://blog. ...
- WebService到底是什?
一.序言 大家或多或少都听过WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成分.但是不得不承认的是Web ...
- Ajax与Jquery题库
一. 填空题 1.在JQuery中被誉为工厂函数的是 $() . 2.在jQuery中需要选取<div>元素里所有<a>元素的选择器是 $("div a&quo ...
- PHP之MVC项目实战(二)
本文主要包括以下内容 GD库图片操作 利用GD库实现验证码 文件上传 缩略图 水印 GD库图片操作 <?php $img = imagecreatetruecolor(500, 300); // ...
- SAE云平台上传图片和发送邮件
1.远程图片保存至Storage 其中public是Storage中的容器名,"目录1/目录2/"是容器下的路径 $file_content 是得到的文件数据 $s = new S ...
- MVC公开课 – 1.基础 (2013-3-15广州传智MVC公开课)
1.MVC设计模式 Model 是指 要处理的业务代码和数据操作代码 View 视图 主要是指的 跟用户打交道 并能够展示数据 Controller 看成是 Model和View的桥梁 优点: 1 ...
- SQL链表查询 数据库为空
查询出数据为空,解决方案:链表 对应字段长度不一致.
- CPU工作状态的知识介绍
转自:http://www.bbwxbbs.com/forum.php?mod=viewthread&tid=2552 近几年,个人计算机的运行速度有了质的飞跃,但是功耗却没能与时俱进,着 ...
- Notice: Only variable references should be returned by reference(PHP版本兼容性问题)
摘自:http://sushener.spaces.live.com/blog/cns!BB54050A5CFAFCDD!435.entry PHP5一个很让人恼火的一点就是BC(向后兼容)不是很理想 ...
- Linux Shell 高级编程技巧3----运行级别脚本介绍
3.运行级别脚本介绍 3.1.运行级别 运行级别介绍: 0 关机 1 单用户模式 2 多用户模式 ...