POJ 2433 Travel 最短路树?
来源:互联网 发布:江苏移动网络怎么样 编辑:程序博客网 时间:2024/05/31 19:14
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=2433
题意
给n个点的图,边权均为1,用sum表示图中任意一对结点间最短距离之和。([u->v]与[v->u]算不同的结点对).从输入的边中,一条一条的删除边。求每次删除后的sum值,如果某两个点间不连通,那么输出-1
思路
每次删除后用floyd妥妥的T了。看了网上的题解才知道还有最短路树这东西。对每个点都跑一次bfs,建立一颗bfs树,保存下对应树的结构,计算出当前点到图中所有点的最短距离之和。在每次删除时判断边是否是bfs树中的,如果不是没有影响,否则断掉边,再跑bfs,具体看代码
#include<cstdio>#include<cstring>#include<vector>#include<queue>using namespace std;const int maxn = 110;const int INF = 1<<30;int n,m;int G[maxn][maxn];vector<int> g[maxn];struct edge{ int u,v;};vector<edge> e;int pre[maxn][maxn],sum[maxn],vis[maxn],d[maxn];int bfs(int s,bool flag){ int ret=0; memset(vis,0,sizeof(vis)); memset(d,0,sizeof(d)); queue<int> q; q.push(s); d[s]=0; vis[s]=1; while(!q.empty()) { int u=q.front();q.pop(); for(int i=0,L=g[u].size();i<L;i++) { int v=g[u][i]; if(G[u][v]&&!vis[v]) { vis[v]=1; d[v]=d[u]+1; q.push(v); if(flag) pre[s][v]=u; } } } for(int i=1;i<=n;i++) { ret+=d[i]; if(vis[i]==0)return -1; } if(flag) sum[s]=ret; return ret;}int main(){ while(~scanf("%d%d",&n,&m)) { for(int i=1;i<=n;i++)g[i].clear(); memset(G,0,sizeof(G)); e.clear(); memset(sum,0,sizeof(sum)); for(int i=0;i<m;i++) { int u,v; scanf("%d%d",&u,&v); g[u].push_back(v); g[v].push_back(u); G[u][v]++; G[v][u]++; e.push_back(edge{u,v}); } int f=0; for(int i=1;i<=n;i++) if(bfs(i,1)==-1) { f=1; break; } for(int i=0;i<e.size();i++) { int ans=0; if(f) { printf("INF\n"); continue; } int u=e[i].u,v=e[i].v; int flag=0; for(int j=1;j<=n;j++) if(pre[j][u]!=v&&pre[j][v]!=u) ans+=sum[j]; else { G[u][v]--;G[v][u]--; int temp=bfs(j,0); G[u][v]++;G[v][u]++; if(temp==-1) flag=1; ans+=temp; } if(flag) { printf("INF\n"); continue; } printf("%d\n",ans); } }}
阅读全文
0 0
- POJ 2433 Travel 最短路树?
- 【HDU】2433 Travel 最短路树优化
- HDU 2433 Travel 最短路树
- HDU - 2433 Travel (最短路树)
- HDU 2433 Travel 最短路树
- hdu 2433 Travel 最短路
- hdu 2433 Travel (bfs+最短路生成树+剪枝)
- hdu 2433 Travel 最短路+预处理
- Hdu 2433 Travel 删边+最短路之和
- HDU 2433 Travel 最短路SPAF
- hdu 2433 Travel 最短路 dijkstra算法。
- HDU 2433 Travel 最短路应用
- HDU-2433 Travel(最短路[Dijkstra])
- HDU 2433 Travel 枚举+最短路
- 【hdu】2433 Travel【最短路删边】
- [HDU2433] Travel BFS+最短路生成树
- 【最短路+bfs+剪枝】杭电 hdu 2433 Travel
- HDU 2433(Travel) 最短路问题(SPFA)
- 409. Longest Palindrome
- mysql workbench快捷键
- Java静态块的初始化
- ubuntu安装有道词典
- 美团内推2018编程题1——改考卷
- POJ 2433 Travel 最短路树?
- 【OpenCV人脸识别入门教程之二】人脸检测
- linux grep工作常用
- JAVA REENTRANTLOCK、SEMAPHORE 的实现与 AQS 框架
- 今天吃点好的---背包
- 百度贴吧的内容的爬取,以一个NBA吧的实例,在python3.6上,IDE是pycharm,最新的正则。
- C#中结构体和类区别和联系
- redis和spring整合
- 线段树模板