HDU 5876 Sparse Graph
2016-09-12 20:37
357 查看
广搜。
因为路径的长度均为$1$,所以每个节点只会被更新一次。
思路:对于一个还未确定路径长度的点$i$,如果他除了与他直接相邻的点之外有别的点已经确定了最短路,那么这个点现在也可以确定最短路了。
因为路径的长度均为$1$,所以每个节点只会被更新一次。
思路:对于一个还未确定路径长度的点$i$,如果他除了与他直接相邻的点之外有别的点已经确定了最短路,那么这个点现在也可以确定最短路了。
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<map> #include<set> #include<queue> #include<stack> #include<iostream> using namespace std; typedef long long LL; const double pi=acos(-1.0),eps=1e-6; void File() { freopen("D:\\in.txt","r",stdin); freopen("D:\\out.txt","w",stdout); } template <class T> inline void read(T &x) { char c=getchar(); x=0; while(!isdigit(c)) c=getchar(); while(isdigit(c)) {x=x*10+c-'0'; c=getchar();} } const int maxn=200010; int T,n,m,d[maxn],sz,h[maxn],s; struct Edge{int u,v,nx;}e[maxn]; void add(int u,int v) { e[sz].u=u; e[sz].v=v; e[sz].nx=h[u]; h[u]=sz++; } int main() { scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); memset(d,-1,sizeof d); memset(h,-1,sizeof h); sz=0; for(int i=1;i<=m;i++) { int u,v; scanf("%d%d",&u,&v); add(u,v); add(v,u); } scanf("%d",&s); d[s]=0; sz=1; int dis=0; while(1) { int sum=0; dis++; for(int i=1;i<=n;i++) { if(d[i]!=-1) continue; int g=0; for(int j=h[i];j!=-1;j=e[j].nx) if(d[e[j].v]!=-1&&d[e[j].v]<dis) g++; if(sz==g) continue; d[i]=dis; sum++; } if(sum==0) break; sz=sz+sum; if(sz==n) break; } sz=0; for(int i=1;i<=n;i++) { if(i==s) continue; sz++; printf("%d",d[i]); if(sz<n-1) printf(" "); else printf("\n"); } } return 0; }
相关文章推荐
- request is not finfished yet!
- svn 切换用户
- 对称加密与非对称加密2_SSL
- String to Integer (atoi)
- 【一】React.JS & BackBone.JS 前后端分离初体验---React组件
- HDU1224-Free DIY Tour
- cuda reduce学习
- JAVA001对象导论10
- 【T电商 3】Nginx的Http(图片)服务器配置+ftp上传使用说明
- 树状数组区间修改加区间查询
- 高楼抛玻璃球(鸡蛋)问题
- PHP设计模式之:单例模式
- 关于如何添加手机照片到ImageView上
- 筛法求素数
- 看重云上创业项目,与AWS合作的光环新网“另有所图”
- 我对Spring的aop的理解
- jsp重定向与请求转发
- MAC为Apache2服务器配置多个虚拟主机
- 7个少根筋的笑话
- @maohoo Oracle两个函数的比较:nvl和nvl2