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. JavaEE之注解

    1注解:Annotation注解,是一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次,给计算机,JVM提供解读信息的. 2注解的作用:编译检查:代码分析,编 ...

  2. OCR训练数据生成方法

    有的时候我们训练网络的时候,数据集在收集的过程中由于种种原因导致图像收集的不完整,比如某些种类很少,或者没有,这个时候我们就可以考虑自己生成数据集. 这个和data augmentation还不太一样 ...

  3. Web性能优化——缓存

    Ehcache: ehcache的配置文件ehcache.xml <?xml version="1.0" encoding="UTF-8"?> &l ...

  4. 解决hive交互模式退格键乱码

    在hive的交互模式下,输入退格.方向键等,出现乱码,可以通过如下方法解决: 1.修改bashrc文件: vi ~/.bashrc 在文件最后添加一行: stty erase ^H. 2.使修改生效: ...

  5. Linux 更改默认安装路径

    一.rpm -qal |grep mysql 二.除了根据软件包来找文件位置之外,最常用的就是通过find查找某个关键字比如mysql所有包含mysql服务的文件路径 find / -name unr ...

  6. Treflection04_面试题

    1. package reflectionZ; import java.lang.reflect.Field; import java.lang.reflect.Method; public clas ...

  7. C++ 进阶学习 ——模板

    模板和重载类似,比重载更省事 通常有两种形式:函数模板和类模板: 函数模板针对仅参数类型不同的函数: 类模板针对仅数据成员和成员函数类型不同的类. 一个简单的函数模板 template <cla ...

  8. aps.net session全面介绍(生命周期,超时时间)

    Asp.Net中的Session与Cookie最大的区别在于:Cookie信息全部存放于客户端,Session则只是将一个ID存放在客户端做为与服务端验证的标记,而真正的数据都是放在服务端的内存之中的 ...

  9. [Hadoop] - Hadoop 3.x版本新特性

    仅做记录--->官方说明:http://hadoop.apache.org/docs/r3.0.0-alpha2/index.html ============================= ...

  10. 智课雅思词汇---二十五、-ate

    智课雅思词汇---二十五.-ate 一.总结 一句话总结:又是动词,又是名词,又是形容词 后缀:-ate ①[动词后缀] 表示做.造成.使之成....做...事等意义 hyphenate 加连字符 o ...