http://acm.hdu.edu.cn/showproblem.php?pid=2433

这个问题因为路径都是1,所以可以用bfs遍历

可以看这几篇文章讲解:

http://blog.csdn.net/panyanyany/article/details/7215069

(这篇代码非常清晰,而且效率很高)

http://www.cppblog.com/keroro/archive/2013/05/27/200622.html?opt=admin

 #include <cstdio>
#include <queue>
#include <vector>
using namespace std; #define MEM(a,v) memset (a,v,sizeof(a))
// a for address, v for value #define max(x,y) ((x)>(y)?(x):(y))
#define max(x,y) ((x)>(y)?(x):(y)) const int L = ;
const int INF = <<; bool used[L], bCnet, bInit ;
int n, m ;
int dist[L], map[L][L], sum_d[L], pre[L][L]; //边表
struct Edge
{
int u,v;
}; Edge e[*L]; int bfs(int beg)
{
MEM(used,false);
MEM(dist,); used[beg] = true; queue<int> q;
q.push(beg); int i; while(!q.empty())
{
int t = q.front();
q.pop();
for(i = ;i<=n;i++)
{
if(!used[i] && map[t][i])
{
used[i] = true;
dist[i] = dist[t]+; //初始化 bInit =true
//初始化后 bfs = false
if(bInit)
pre[beg][i] = t;
//pre储存的是beg树里面,i的上一个元素
//这样只需判断pre[x][u] ==v 和pre[x][v] == u
//就可以知道x树里面有没有uv边 q.push(i);
}
}
} int sum = ; //求出点beg到各边的距离和
// 从 beg+1 开始 和从 1 开始,效果差不多
for(i = beg+;i<=n;i++)
{
if(!dist[n])
return INF;
else
sum+=dist[i];
}
return sum; } int main()
{
int i,j; int u,v,sum,res; while(~scanf("%d%d",&n,&m))
{
MEM(map,);
MEM(pre,); for(i = ;i<=m;i++)
{
scanf("%d%d",&u,&v);
map[u][v] = ++map[v][u]; //如果有重复边的话,map为2 e[i].u = v;
e[i].v = u;
} sum = ;
bInit = true;
bCnet = true; //求出每个点到其他点的距离和
for(i = ;i<=n;i++)
{
sum_d[i] = bfs(i);
sum+=sum_d[i]; if(sum>=INF)
{
bCnet = false;
break;
}
} bInit = false; //删除边
for(i = ;i<=m;i++)
{
//uv为删除的边
u = e[i].u;
v = e[i].v; // map[u][v] 判断有无重边,可以优化300多MS
if(bCnet && map[u][v] == )
{
res = ;
for(j = ;j<=n;j++)
{
//j树里不存在删除的边
// 最重要的剪枝,否则直接超时
if(pre[j][u] != v && pre[j][v] !=u)
{
res += sum_d[j];
}
else
{
//存在uv边,j树重新bfs
--map[u][v];
--map[v][u];
res += bfs(j);
++map[u][v];
++map[v][u]; if(res >= INF)
break; } } }
else
res=sum; if(res >= INF)
puts("INF");
else
printf("%d\n",res*); } } return ;
}

HDU 2433 (最短路+BFS+剪枝)的更多相关文章

  1. hdu_1253_胜利大逃亡(bfs+剪枝)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 题意:三维BFS,不解释 题解:DFS+剪枝会超时,裸BFS会超时,BFS+剪枝才能AC,有点伤 ...

  2. ACM: HDU 2544 最短路-Dijkstra算法

    HDU 2544最短路 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descrip ...

  3. UESTC 30 &&HDU 2544最短路【Floyd求解裸题】

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  4. hdu 5521 最短路

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  5. HDU 1428 漫步校园 (BFS+优先队列+记忆化搜索)

    题目地址:HDU 1428 先用BFS+优先队列求出全部点到机房的最短距离.然后用记忆化搜索去搜. 代码例如以下: #include <iostream> #include <str ...

  6. HDU-1226 超级密码 (BFS+剪枝)

    Problem Description Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息:密 码是一个C进 ...

  7. HDU 1501 Zipper 【DFS+剪枝】

    HDU 1501 Zipper [DFS+剪枝] Problem Description Given three strings, you are to determine whether the t ...

  8. HDU6223 Infinite Fraction Path bfs+剪枝

    Infinite Fraction Path 这个题第一次看见的时候,题意没搞懂就没做,这第二次也不会呀.. 题意:第i个城市到第(i*i+1)%n个城市,每个城市有个权值,从一个城市出发走N个城市, ...

  9. HDU - 2544最短路 (dijkstra算法)

    HDU - 2544最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以 ...

随机推荐

  1. Python读取mdb文件以及shell检测

    最近写了两个python的脚本不过实际意义不是很大,就是想练练python写程序,一直研究web方面脚本写的少多了,还有C语言也用的少多了.现在有时间得多写写程序,别把以前学到的知识给忘了. 作者: ...

  2. javascript简要笔记

      零. 数据   0. 变量 分为字符串,数字,undefined, null,对象 undefined类型是只声明了变量,但是没赋值 可以使用typeof()函数来查看变量类型   例子1 var ...

  3. linux中python配置tab=4个空格,并显示行号。

    vim ~/.vimrc 写入: set ts=4 set nu :wq 保存. source ~/.vimrc 使之生效.

  4. FutureTask与Fork/Join

    在学习多线程的过程中,我们形成了一种思维习惯.那就是对于某个耗时操作不再做同步操作,让他分裂成一个线程之后执行下一步,而线程执行耗时操作.并且我们希望在我们需要它返回的时候再去调用它的结果集.好比我们 ...

  5. 【python】10分钟教你用python打造贪吃蛇超详细教程

    10分钟教你用python打造贪吃蛇超详细教程 在家闲着没妹子约, 刚好最近又学了一下python,听说pygame挺好玩的.今天就在家研究一下, 弄了个贪吃蛇出来.希望大家喜欢. 先看程序效果: 0 ...

  6. 1.2 Percona XtraDB Cluster Limitations

    摘要: 出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该 ...

  7. Echarts【1、数据过多导致显示不全分页,2、数据展示探讨分析】

    var len=<c:out value="${len }"></c:out>; var dataZoom_end=null; //为空默认100%所以默认 ...

  8. Camera Sensor

    camera sensor分为YUV sensor和Bayer sensor. YUV Sensor YUV Sensor输出的格式是YUV,图像的处理效果使用sensor内部的ISP,BB端接收到的 ...

  9. 【初探】java性能火焰图的生成

    前言 开始之前,你需要准备的环境: Linux系统机器或者虚拟机一台,里面需要安装的软件:git.jdk.perl. 简单介绍: java性能分析火焰图的所做的事情就是能够分析出java程序运行期间存 ...

  10. WebDriver中的Actions对象

    我们可以利用Actions对象来模拟鼠标的操作以及页面的拖拽 1.模拟鼠标的双击操作: 1)模拟双击一个div,验证点击之前的字体为14号 2)点击后字体为20号 Actions builder = ...