HDU 2433 (最短路+BFS+剪枝)
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+剪枝)的更多相关文章
- hdu_1253_胜利大逃亡(bfs+剪枝)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 题意:三维BFS,不解释 题解:DFS+剪枝会超时,裸BFS会超时,BFS+剪枝才能AC,有点伤 ...
- ACM: HDU 2544 最短路-Dijkstra算法
HDU 2544最短路 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descrip ...
- UESTC 30 &&HDU 2544最短路【Floyd求解裸题】
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- hdu 5521 最短路
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- HDU 1428 漫步校园 (BFS+优先队列+记忆化搜索)
题目地址:HDU 1428 先用BFS+优先队列求出全部点到机房的最短距离.然后用记忆化搜索去搜. 代码例如以下: #include <iostream> #include <str ...
- HDU-1226 超级密码 (BFS+剪枝)
Problem Description Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息:密 码是一个C进 ...
- HDU 1501 Zipper 【DFS+剪枝】
HDU 1501 Zipper [DFS+剪枝] Problem Description Given three strings, you are to determine whether the t ...
- HDU6223 Infinite Fraction Path bfs+剪枝
Infinite Fraction Path 这个题第一次看见的时候,题意没搞懂就没做,这第二次也不会呀.. 题意:第i个城市到第(i*i+1)%n个城市,每个城市有个权值,从一个城市出发走N个城市, ...
- HDU - 2544最短路 (dijkstra算法)
HDU - 2544最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以 ...
随机推荐
- Flask_WTF升级到最新版本
用pip $ pip install -U Flask-WTF 看熊哥的后端管理系统时候报错ImportError: cannot import name FlaskForm. 那一行的代码:from ...
- npm start时报错 npm ERR!Windows_NT 6.1.7601
练习webpack 时 输入 npm start就报这样的错.百度了一圈,都没有找到答案.于是,我开始看错误信息......................................../手动黑 ...
- django入门-静态文件-part6
尊重作者的劳动,转载请注明作者及原文地址 http://www.cnblogs.com/txwsqk/p/6517553.html 完全翻译自官方文档 https://docs.djangoproje ...
- leetcode-884-两句话中的不常见单词
题目描述: 给定两个句子 A 和 B . (句子是一串由空格分隔的单词.每个单词仅由小写字母组成.) 如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的. 返回 ...
- iOS开发debug跟release版本NSLog屏蔽方法
简单介绍以下几个宏: 1) __VA_ARGS__ 是一个可变参数的宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持).宏前面加上##的作用在于,当可变参 ...
- 49.RocketMQ 双主搭建(本文非EamonSec原创)
声明:本文非EamonSec原创,copy自网上下载的某个个文件 1.RocketMQ介绍 1.1. 简介 RocketMQ 是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 ...
- 关于Nginx启动成功,浏览器不能访问的解决办法
本人初学Nginx,第一天配置成功并能通过浏览器进行访问. 第二天重新打开,将Nginx启动,但是浏览器却访问不了. 执行 ps aux|grep nginx ,执行结果如下,的确Nginx服务已经启 ...
- 关于Vue中main.js,App.vue,index.html之间关系进行总结
在初始化的Vue项目中,我们最先接触到的就是main.js,App.vue,index.html这三个文件,我们从培训视频或者官方文档上可以了解到: index.html---主页,项目入口 App. ...
- 本地docker镜像上传Docker Hub,并且在腾讯云上pull该镜像,最后运行成功。
1:在docker hub 上注册一个账号(本人直接能注册,有的说不能),然后创建自己的仓库. 2:登录docker hub ( longdbdocker --hub账号,longdb --仓库名称) ...
- javascript的简单查询和插入和修改
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...