http://pat.zju.edu.cn/contests/pat-a-practise/1018

在杭州各个点,有很多自助自行车的点,最大容纳点为CMAX,但比较适合的情况是CMAX/2,

现在从起点到终点,在最短路的情况下,调整各个车站的自行车数量使之CMAX/2,问开始时要提供的自行车最少与最后剩余的自行车最少的路径

最短路+DFS

在DFS时加上一个剪枝 if(lenth>dis[first])return ;就可以通过所有点

#include<stdio.h>
#define MAX 0x3ffffff
int cmax,N,end,M;
int node[];
int map[][];
int path[]; int rpath[];
int in,out,nowstep,rstep; bool hash[][];
int shortlen; int dis[];
bool use[];
int ok=; void dijk( )
{
int n=N,m;
int min,rj,i,j;
for(j=;j<=n;j++)
{
dis[j]=map[][j];
use[j]=;
}
use[]=;
for(i=;i<n;i++)
{
min=MAX;
for(j=;j<=n;j++)
{
if(use[j]==)continue;
if(dis[j]<min)
{
min=dis[j];
rj=j;
}
} use[rj]=;
for(j=;j<=n;j++)
{
if(use[j]==)continue;
if(dis[j]>dis[rj]+map[rj][j])
dis[j]=dis[rj]+map[rj][j];
}
} shortlen=dis[end];
} void print(){
int i;
printf("%d",in);
printf("");
for(i=;i<=rstep;i++){
printf("->%d",rpath[i]);
}
printf(" %d\n",out);
} void cal(){
int tin=,tout=;
int i,add=;
for(i=;i<=nowstep;i++){
add+=node[path[i]]-cmax/;
if(add<tin)tin=add;
}
if(tin>)tin=;
else tin=-tin;
tout=add+tin; if((tin<in)||((tin==in)&&tout<out)){
in=tin;
out=tout;
if(in==&&tout==)ok=;
rstep=nowstep;
for(i=;i<=nowstep;i++){
rpath[i]=path[i];
}
} //test
/*
printf("%d",tin);
printf(" 0");
for(i=1;i<=nowstep;i++){
printf("->%d",path[i]);
}
printf(" %d\n",tout);
*/
}
void dfs(int step,int first,int lenth)
{
if(ok==||lenth>dis[first])return ; //lenth>dis[first] 是个关键的剪枝,不加的话最后一个点会超时
if(lenth==shortlen&&first==end){
nowstep=step;
cal();
} int j;
for(j=;j<=N;j++){
if(hash[first][j]==||map[j][first]==MAX)continue;
hash[first][j]=hash[j][first]=;
path[step+]=j;
dfs(step+,j,lenth+map[first][j]);
hash[first][j]=hash[j][first]=;
}
} int main()
{
while(scanf("%d%d%d%d",&cmax,&N,&end,&M)!=EOF){
int i,j,temp;
ok=;
in=;
out=; for(i=;i<=N;i++){
for(j=;j<=N;j++){
map[i][j]=MAX;
hash[i][j]=;
}
} for(i=;i<=N;i++){
scanf("%d",&node[i]);
} int ll,rr,v;
for(i=;i<=M;i++){
scanf("%d%d%d",&ll,&rr,&v);
map[ll][rr]=map[rr][ll]=v;
}
dijk();
dfs(,,);
print();
} return ;
}

PAT1018——最短路加DFS的更多相关文章

  1. NOIP 2013 货车运输 最大生成树加DFS巧妙AC

    #include<set> #include<map> #include<cmath> #include<queue> #include<stac ...

  2. HDU(1572),最短路,DFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1572 很久没写深搜了,有点忘了. #include <iostream> #include ...

  3. poj3160强连通分量加dfs

    After retirement as contestant from WHU ACM Team, flymouse volunteered to do the odds and ends such ...

  4. Treasure Hunt--poj1066(最短路加判断线段的关系)

    http://poj.org/problem?id=1066 题目大意:有n条线段 他们都在这个房间里   最后有一个点代表起始位置 现在想通过墙出去  他只能爆破每个房间的中点的门   问最少的门通 ...

  5. Labyrinth 树的直径加DFS

    The northern part of the Pyramid contains a very large and complicated labyrinth. The labyrinth is d ...

  6. HDU - 2066 最短路+加一个节点

    一个图上,有M条边,Z个出发点,Y个终止点.求一条最短路,其中起点是Z中的任意一点,终点是Y中任意一点. Input 输入数据有多组,输入直到文件结束. 每组的第一行是三个整数M,Z,Y 接着有M行, ...

  7. nyoj 203 三国志(最短路加01背包)

    三国志 时间限制:3000 ms  |  内存限制:65535 KB 难度:5   描述 <三国志>是一款很经典的经营策略类游戏.我们的小白同学是这款游戏的忠实玩家.现在他把游戏简化一下, ...

  8. zoj 2110 很好的dfs+奇偶剪枝

    //我刚开始竟然用bfs做,不断的wa,bfs是用来求最短路的而这道题是求固定时间的 //剪纸奇偶剪枝加dfs #include<stdio.h> #include<queue> ...

  9. hdu 6852Path6(最短路+最小割)

    传送门 •题意 有n个城市,标号1-n 现花费最小的代价堵路 使得从1号城市到n号城市的路径边长 (注意只是变长不是最长) 堵一条路的代价是这条路的权值 •思路 在堵路以前,从1到n的最小路径当然是最 ...

随机推荐

  1. Pandas窗口函数

    为了处理数字数据,Pandas提供了几个变体,如滚动,展开和指数移动窗口统计的权重. 其中包括总和,均值,中位数,方差,协方差,相关性等. 下来学习如何在DataFrame对象上应用上提及的每种方法. ...

  2. ceph存储 ceph Bluestore的架构

    ceph 目前是开源社区比较流行的分布式块存储系统,其以良好的架构,稳定性和完善的数据服务功能,获得的了广泛的部署和应用. 目前ceph 最大的问题是其性能相对较差,特别是无法发挥SSD等高速设备的硬 ...

  3. HDFS集群启动的常见问题

    hdfs集群启动的常见问题 1.用浏览器访问namenode的50070端口,不正常,需要诊断问题出在哪里: a.在服务器的终端命令行使用jps查看相关进程 观察节点是否存活 b.如果已经知道了启动失 ...

  4. JAVA 泛型意淫之旅(二)

    编译器如何处理泛型 泛型类编译后长什么样? 接上文,JAVA 泛型意淫之旅1,成功迎娶白富美后,终于迎来了最振奋人心的一刻:造娃!造男娃还是造女娃?对于我们程序猿来说,谁还在乎是男娃女娃,只要是自己的 ...

  5. NLP(三)_统计语言模型

    概念 统计语言模型:是描述自然语言内在的规律的数学模型.广泛应用于各种自然语言处理问题,如语音识别.机器翻译.分词.词性标注,等等.简单地说,语言模型就是用来计算一个句子的概率的模型 即P(W1,W2 ...

  6. Ajax技术基础

    对于AJAX技术,感觉以前虽然用过但是对于AJAX没有一个清晰的认识,今天专门总结一下,希望掌握的更加牢固吧! 一,什么是AJAX? AJAX通常被叫做异步刷新技术,其实他也是可以同步的.主要都用于异 ...

  7. docker的应用

    [root@yz6205 ~]# docker imagesINFO[0063] GET /v1.19/images/json REPOSITORY TAG IMAGE ID CREATED VIRT ...

  8. elementUI表格合并单元格

    相信你肯定看了 ElementUI 官方文档了,没看的话先去看下表格各个属性的意义,方便下文阅读:传送门 但你会发现此例过于简单,死数据,但我们开发的时候往往都是后台传递过来的数据,导致我们 rows ...

  9. 条款3:尽可能的使用const

    const成员函数的一般好处有: 它使得class接口比较容易理解. 它使得操纵const对象成为可能. 使用的过程中应该在const与non const成员函数之间避免代码重复: class Tex ...

  10. Python编码错误的解决办法SyntaxError: Non-ASCII character '\xe5' in file

    [现象] 在编写Python时,当使用中文输出或注释时运行脚本,会提示错误信息: SyntaxError: Non-ASCII character '\xe5' in file ******* [原因 ...