Travel

Time Limit: 10000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 155 Accepted Submission(s): 68
 
Problem Description
      One day, Tom traveled to a country named BGM. BGM is a small country, but there are N (N <= 100) towns in it. Each town products one kind of food, the food will be transported to all the towns. In addition, the trucks will always take the shortest way. There are M (M <= 3000) two-way roads connecting the towns, and the length of the road is 1.
      Let SUM be the total distance of the shortest paths between all pairs of the towns. Please write a program to calculate the new SUM after one of the M roads is destroyed.

 
Input
      The input contains several test cases.
      The first line contains two positive integers N, M. The following M lines each contains two integers u, v, meaning there is a two-way road between town u and v. The roads are numbered from 1 to M according to the order of the input.
      The input will be terminated by EOF.

 
Output
      Output M lines, the i-th line is the new SUM after the i-th road is destroyed. If the towns are not connected after the i-th road is destroyed, please output “INF” in the i-th line.
 
Sample Input
5 4
5 1
1 3
3 2
5 4
2 2
1 2
1 2
 
Sample Output
INF
INF
INF
INF
2
2
 
 
Source
2008 Asia Chengdu Regional Contest Online
 
Recommend
lcy
/*
题意:给出你n个点,然后m条双向的路。让你输出第i条路毁坏之后,任意两个城市之间最短路的总和,如果i条路毁坏之后
城市不在联通,那么就输出INF
初步思路:遍历每条边断了,然后dijkstra搞一下最短路,删边操作,只需要记录一下两点之间线路的条数,如果大于两条
的话,删完这条边的时候,两点间的权值还是为1,否则,删完之后权值为零 #超时:剪一下枝,如果两点间有两条或以上的线路的话,就不用重新dijkstra了,直接调用离线计算好的就行了 #再次超时:最短路写的不行,这里用最短路的效率不如直接用bfs(),因为这里每条路的权值都是1,这样的话bfs的效率会比
dijkstra高很多。 #还是超时:.....找不出问题烦,加一个剪枝条件,遍历第一遍的时候,将用到的边标记一下,如果删除的时候,这条边根本
没用到,那么这条边删掉是不影响后边结果的 #继续超时:换成邻接矩阵试试 #感悟:靠,用邻接矩阵就过了
*/
#include<bits/stdc++.h>
#define INF 3000000
using namespace std;
int n,m;
int u[],v[];
int mapn[][];//存储地图
int used[][][];//用来表示用到了哪条边
int dis[];//表示耗费的路径
int sum[];//记录每个点的最短路
int vis[];
vector<int>edge[];
int res=;
int dijkstra(int s,bool flag=false){
memset(vis,,sizeof vis);
memset(dis,,sizeof dis);
queue<int>q;
q.push(s);
vis[s]=;
while(!q.empty()){
int Start=q.front();
q.pop();
// if(flag==false)
// cout<<"s="<<s<<" Start="<<Start<<endl;
for(int i=;i<edge[Start].size();i++){
int Next=edge[Start][i];
if(mapn[Start][Next]==) continue;
// if(flag==false)
// cout<<"Start="<<Start<<" Next="<<Next<<endl;
if(!vis[Next]){//这个点没有遍历过
dis[Next]=dis[Start]+;
if(flag==true){
used[s][Start][Next]=;
used[s][Next][Start]=;
}
q.push(Next);
vis[Next]=;
}
}
}
int res=;
for(int i=;i<=n;i++){
if(i==s) continue;
if(dis[i]==){
return INF;
}
res+=dis[i];
}
return res;
}
void init(){
memset(mapn,,sizeof mapn);
memset(used,,sizeof used);
for(int i=;i<=;i++){
edge[i].clear();
}
}
int main(){
// freopen("in.txt","r",stdin);
while(scanf("%d%d",&n,&m)!=EOF){
init();
for(int i=;i<m;i++){
scanf("%d%d",&u[i],&v[i]);
edge[u[i]].push_back(v[i]);
edge[v[i]].push_back(u[i]);
mapn[u[i]][v[i]]++;
mapn[v[i]][u[i]]++;
}//建图
// for(int i=1;i<=n;i++){
// for(int j=1;j<=n;j++){
// cout<<d_mapn[i][j]<<" ";
// }
// cout<<endl;
// }
int frist=;
for(int i=;i<=n;i++){
sum[i]=dijkstra(i,true);
// cout<<cur<<" ";
if(sum[i]==INF){
frist=INF;
break;
}
frist+=sum[i];
}
// cout<<endl;
//cout<<"frist="<<frist<<endl;
if(frist==INF){
for(int i=;i<m;i++)
printf("INF\n");
continue;
}
for(int i=;i<m;i++){//删除第i条边
int f=;
res=;
if(mapn[u[i]][v[i]]>=){
printf("%d\n",frist);
}else{
// cout<<"一条路"<<endl;
mapn[u[i]][v[i]]=mapn[v[i]][u[i]]=;//删掉这条边
// for(int j=1;j<=n;j++){
// for(int k=1;k<=n;k++){
// cout<<d_mapn[j][k]<<" ";
// }
// cout<<endl;
// }
for(int j=;j<=n;j++){
if(used[j][u[i]][v[i]]==){//这条边没有用到
res+=sum[j];
continue;
}
int cnt=dijkstra(j);
// cout<<"i="<<i<<" j="<<j<<" "<<cnt<<endl;
if(cnt==INF){
f=;
break;
}
res+=cnt;
}
if(f==) puts("INF");
else printf("%d\n",res);
mapn[u[i]][v[i]]=mapn[v[i]][u[i]]=;
}
}
}
return ;
}

Travel的更多相关文章

  1. 图论 - Travel

    Travel The country frog lives in has nn towns which are conveniently numbered by 1,2,…,n. Among n(n− ...

  2. 【BZOJ-1576】安全路径Travel Dijkstra + 并查集

    1576: [Usaco2009 Jan]安全路经Travel Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1044  Solved: 363[Sub ...

  3. Linux inode && Fast Directory Travel Method(undone)

    目录 . Linux inode简介 . Fast Directory Travel Method 1. Linux inode简介 0x1: 磁盘分割原理 字节 -> 扇区(sector)(每 ...

  4. HDU - Travel

    Problem Description Jack likes to travel around the world, but he doesn’t like to wait. Now, he is t ...

  5. 2015弱校联盟(1) - I. Travel

    I. Travel Time Limit: 3000ms Memory Limit: 65536KB The country frog lives in has n towns which are c ...

  6. ural 1286. Starship Travel

    1286. Starship Travel Time limit: 1.0 secondMemory limit: 64 MB It is well known that a starship equ ...

  7. Travel Problem[SZU_K28]

    DescriptionAfter SzuHope take part in the 36th ACMICPC Asia Chendu Reginal Contest. Then go to QingC ...

  8. hdu 5441 travel 离线+带权并查集

    Time Limit: 1500/1000 MS (Java/Others)  Memory Limit: 131072/131072 K (Java/Others) Problem Descript ...

  9. Codeforces Beta Round #51 A. Flea travel 水题

    A. Flea travel Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/55/problem ...

  10. hdu 5441 Travel 离线带权并查集

    Travel Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5441 De ...

随机推荐

  1. Linux Ubuntu从零开始部署web环境及项目 -----快捷键设置(四)

    上篇将了如何在linux部署web项目,这篇介绍如何设置常用快捷键 一.路径快捷键设置 临时快捷键设置:  执行XShel,输入: alias 'aa=cd /etc/sysconfig'       ...

  2. java中判断字符串是否为数字的方法的几种方法

    1.用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = 0; i < str.length(); i++){ ...

  3. java获取MP3的播放长度

    在开发一个web项目时,需要获取MP3的播放长度.上网找了一些方法,最后找到了一个可以用的java包jaudiotagger-2.2.3.jar,java包网址http://www.jthink.ne ...

  4. iOS Storyboard约束详解

    链接:http://www.jianshu.com/p/b88c65ffc3eb 约束,就是指--此处略去1万字--都懂的,就不说了.直接进入实战环节. 本文的控件约束都是围绕着UITableView ...

  5. Highway Networks Pytorch

    导读 本文讨论了深层神经网络训练困难的原因以及如何使用Highway Networks去解决深层神经网络训练的困难,并且在pytorch上实现了Highway Networks. 一 .Highway ...

  6. 技术领导(Technical Leader)画像

    程序员都讨厌被管理,而乐于被领导.管理的角色由PM(project manager)扮演,具体来说,PM负责提需求.改改改.大多数情况,PM是不懂技术的,这也是程序员觉得PM难以沟通的原因.而后者由技 ...

  7. 教你ASP.NET中如何防止注入攻击

    你应该在程序中验证所有的不信任输入.你应该假定所有的用户输入都是非法的.用户可以在应用程序中提供表单字段,查询字串,客户端cookies和浏览器环境值比如用户代理字串和IP地址等. 弱输入校验通常为注 ...

  8. Java高新技术 JavaBean内省

     Java高新技术  JavaBean内省 知识概要:                 (1)了解JavaBean内省                 (2)JavaBean的简单内省操作     ...

  9. mybatis一对一嵌套查询

    要求:查询一个员工的时候,把他对应的部门也查询出来 实现(其他配置这里不作说明,框架基于spring_springMVC_mybatis_oracle): 如有不对或不适的地方,请多多指教. 1.新建 ...

  10. 虚拟机+桥接模式+Host-only模式 搭建完美的Windows下Linux开发环境

    相信有很多鞋童和我一个样是一枚Linux码农(我现在还是嵌入式方向). 做Linux开发势必需要一个Linux环境, 大多数开发者会首先选择一个Linux发行版, 其中Ubuntu LTS版本应该是选 ...