[HDU2433] Travel BFS+最短路生成树
来源:互联网 发布:银行大数据 客户分层 编辑:程序博客网 时间:2024/06/05 00:08
题目意思是有n个点,m条边,对于每一条边,求出删去它后各点之间的最短路总和,若删去后图不连通,则输出-1。
刚开始当然想到暴力,于是枚举删去哪条边,然后BFS一下,复杂度为
#include<stdio.h>#include<vector>#include<string.h>#include<algorithm>#include<iostream>#define M 105using namespace std;template <class T>inline void Rd(T &res){ char c;res=0;int k=1; while(c=getchar(),c<48&&c!='-'); if(c=='-'){k=-1;c='0';} do{ res=(res<<3)+(res<<1)+(c^48); }while(c=getchar(),c>=48); res*=k;}typedef pair<int,int> P;vector<P>G[M];struct edge{ int u,v;}e[2005];struct node{ int pos,step;}Q[M];int n,m,dis[M],used[M],mark[M][M],res[2005],cnt[M][M],degree[M];void BFS(int x,int t){ memset(dis,-1,sizeof(dis));//初始化dis,其实不需要,是为了调试的时候好看 memset(used,0,sizeof(used)); int L=0,R=0; node st; st.pos=x,st.step=0; dis[x]=0; used[x]=1; Q[R++]=st; while(L<R){ node now=Q[L++]; for(int i=0;i<G[now.pos].size();i++){ int k=G[now.pos][i].first; int id=G[now.pos][i].second; if(!used[k]&&id!=t){ used[k]=1; mark[now.pos][k]=mark[k][now.pos]=1; node nxt; nxt.pos=k; nxt.step=now.step+1; dis[k]=nxt.step; Q[R++]=nxt; } } }}int main(){ int u,v; Rd(n);Rd(m); for(int i=1;i<=m;i++){ Rd(u);Rd(v); e[i].u=u;e[i].v=v; cnt[u][v]++;cnt[v][u]++; degree[u]++;degree[v]++; G[u].push_back(P(v,i)); G[v].push_back(P(u,i)); } for(int i=1;i<=n;i++){ int sum=0; memset(mark,0,sizeof(mark)); BFS(i,0); for(int j=1;j<=n;j++)sum+=dis[j]; for(int j=1;j<=m;j++){ if(res[j]==-1)continue; if(degree[e[j].u]==1||degree[e[j].v]==1){res[j]=-1;continue;} if(!mark[e[j].u][e[j].v]||cnt[e[j].u][e[j].v]>1){ res[j]+=sum; } else{ BFS(i,j); for(int k=1;k<=n;k++){ if(!used[k]){res[j]=-1;break;} res[j]+=dis[k]; } } } } for(int i=1;i<=m;i++)printf("%d\n",res[i]); return 0;}
1 0
- [HDU2433] Travel BFS+最短路生成树
- hdu2433 BFS最短路
- hdu 2433 Travel (bfs+最短路生成树+剪枝)
- HDU2433 Travel BFS求最短路径树+优化
- HDU2433 Travel 最短路径树
- hdu2433之最短路
- hdu2433 最短路+思维
- SGU 4444 Travel(最短路+bfs)
- hdu2433 Travel
- 【最短路+bfs+剪枝】杭电 hdu 2433 Travel
- hdu2433 Travel(最短路径dijkstra,好题)
- 【HDU】2433 Travel 最短路树优化
- HDU 2433 Travel 最短路树
- HDU - 2433 Travel (最短路树)
- HDU 2433 Travel 最短路树
- POJ 2433 Travel 最短路树?
- hdu2433(最短路径树)
- UVA - 10816 Travel in Desert(枚举+生成树+最短路)
- 统计玩家游戏的小时、分钟、秒数并显示在文本上
- 皮尔逊相关系数 定义+python代码实现 (与王印讨论公式)
- HDU 5750 Dertouzos(素数)
- Components and Characteristics of a Wireless Network
- JFinal Web开发学习(七)使用layUI美化的登录功能
- [HDU2433] Travel BFS+最短路生成树
- vim在同一个窗口同时编辑多个文件
- 数据库连接池
- Lua - 0
- HashTable浅析
- JavaScript-事件委托
- eclipse如何去掉无用的validation、优化eclipse
- tornado学习精要
- 暴风魔镜之虚拟漫游(更新中。。。)