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. Qt5学习笔记(消息过滤器)

    T06EventFilter.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += widgets gui MyWidget.h #i ...

  2. ionic 项目 随笔

    1,首先 会进入src/index.html, <!-- The polyfills js is generated during the build process --> <sc ...

  3. jquery源码解析:jQuery数据缓存机制详解1

    jQuery中有三种添加数据的方法,$().attr(),$().prop(),$().data().但是前面两种是用来在元素上添加属性值的,只适合少量的数据,比如:title,class,name等 ...

  4. Win10桌面图标无法拖动

    1.右键桌面>查看>取消自动排列 2.桌面多按几次Esc 3.gpedit.msc  “用户配置/管理模板/Windows组件/任务计划程序/禁止拖放>改为未配置

  5. 开源代码MyCommons

    MyCommons是我在开发Android App中,经过多个项目的实践和应用,上十次修改的,总结起来的代码,目的是希望大家能够快速的完成项目的开发. 主要也是参考了afinal和xutils2个框架 ...

  6. sqlplus登录远程数据库与数据导出

    一.登录 1.cmd中输入sqlplus /nolog 2.链接数据库,root是用户名,root123是密码,ORCL是数据库名.conn root/root123@192.168.1.27:152 ...

  7. ReactNative 打包 APK

    ReactNative打包步骤: 1.在项目的根目录执行下面这行命令: keytool -genkey -v -keystore my-release-key.keystore -alias my-k ...

  8. 洛谷 P2014 选课(树形背包)

    洛谷 P2014 选课(树形背包) 思路 题面:洛谷 P2014 如题这种有依赖性的任务可以用一棵树表示,因为一个儿子要访问到就必须先访问到父亲.然后,本来本题所有树是森林(没有共同祖先),但是题中的 ...

  9. springboot自定义jmx对象

    在使用springboot-admin对springboot项目进行监控的时候我们发现其是具有web访问jmx对象的功能的,那它内部是怎么实现的呢. Jolokia是一个JMX-http桥梁,它提供了 ...

  10. java基本编译

    1.java语言严格区分大小写:1个源文件其中最多只能有一个public类:源文件必须和public类同名:每个类对应一个class字节码,且同名. 2.编译.   javac -d dir Hell ...