POJ 2433 Travel 最短路树?
2017-08-31 20:58
239 查看
题目链接
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); } } }
相关文章推荐
- HDU 2433 Travel 最短路树
- hdu 2433 Travel 最短路+预处理
- hdu 2433 Travel (bfs+最短路生成树+剪枝)
- hdu 2433 Travel 最短路
- HDU 2433 Travel 枚举+最短路
- [转]HDU 2433 Travel 最短路 预处理优化
- 【HDU】2433 Travel 最短路树优化
- 【hdu】2433 Travel【最短路删边】
- HDU - 2433 Travel (最短路树)
- HDU-2433 Travel(最短路[Dijkstra])
- 【最短路+bfs+剪枝】杭电 hdu 2433 Travel
- HDU 2433 Travel 最短路树
- HDU 2433 Travel 最短路应用
- HDU 2433 Travel 最短路SPAF
- HDU 2433 Travel (最短路,BFS,变形)
- hdu 2433 Travel(枚举删掉的边求取最短路)
- POJ 2387 Til the Cows Come Home(最短路 Dijkstra/spfa)
- POJ 2449 Remmarguts' Date(k短路)
- POJ-2253 Frogger( 最短路 )
- POJ-1797 Heavy Transportation( 最短路 )