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. css预处理器less和scss之sass介绍(二)

    本来打算整理jQuery Mobile来着,但是没有研究明白,所以接着上个周的继续介绍... [scss中的基础语法]   1.scss中的变量 ①声明变量:$变量名:变量值 $width:100px ...

  2. DOM中元素对象的属性方法

    在 HTML DOM (文档对象模型)中,每个部分都是节点. 节点是DOM结构中最基本的组成单元,每一个HTML标签都是DOM结构的节点. 文档是一个    文档节点 . 所有的HTML元素都是    ...

  3. QT_FORWARD_DECLARE_CLASS

    相当于class 类名. 那么他和#include 包含头文件有什么区别呢 首先我们为什么要包括头文件问题的回答很简单通常是我们需要获得某个类型的定义(definition).那么接下来的问题 ...

  4. For in 与For of 区别

    For in 与For of  区别 for in遍历的是数组的索引(即键名)一般用于遍历对象:for(var index in obj):而for of遍历的是数组元素值:for(var value ...

  5. 吐槽CSDN--想钱想疯了--阅读全文需要关闭广告屏蔽

    吐槽CSDN 想钱想疯了–阅读全文需要关闭广告屏蔽 近来csdn开始主推博客皮肤升级,说白了就是有一套新的盈利模式,具体怎么操作呢: 1. 采用信息流方式,博客内容变成类似朋友圈.微博.知乎那样的信息 ...

  6. This application failed to start because it could not find or load the Qt platform plugin "windows" 的问题原因以及解决方案

    1. 问题原因非常简单,经过各种百度,都没有找到解决方案,在此做一个记录备用. 2.原因就在于,项目目录使用了中文路径,然后出现了这个问题. 3.我是在使用 syncfusion 下的HTML 转PD ...

  7. 关于master..xp_cmdshell’的几个错误_解决办法(转)

    错误一:Error Message:未能找到存储过程 'master..xp_cmdshell'. 第一步先删除:drop procedure sp_addextendedprocdrop proce ...

  8. 简易js模板引擎

    前面 js 模板引擎有很多很多,我以前经常用 art-template ,有时候也会拿 vue 来当模板引擎用. 直到...... 年初的时候,我还在上个项目组,那时候代码规范是未经允许不能使用 [外 ...

  9. JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 1

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7703679.html ------------------------------------ ...

  10. hash在URL上的用法及作用

    阅读目录 1. # 2. ? 3. & 回到顶部 1. # 10年9月,twitter改版.一个显著变化,就是URL加入了"#!"符号.比如,改版前的用户主页网址为http ...