杭电1142(最短路径+dfs)
A Walk Through the Forest
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5421 Accepted Submission(s):
1988
especially since his accident made working difficult. To relax after a hard day,
he likes to walk home. To make things even nicer, his office is on one side of a
forest, and his house is on the other. A nice walk through the forest, seeing
the birds and chipmunks is quite enjoyable.
The forest is beautiful, and
Jimmy wants to take a different route everyday. He also wants to get home before
dark, so he always takes a path to make progress towards his house. He considers
taking a path from A to B to be progress if there exists a route from B to his
home that is shorter than any possible route from A. Calculate how many
different routes through the forest Jimmy might take.
containing 0. Jimmy has numbered each intersection or joining of paths starting
with 1. His office is numbered 1, and his house is numbered 2. The first line of
each test case gives the number of intersections N, 1 < N ≤ 1000, and the
number of paths M. The following M lines each contain a pair of intersections a
b and an integer distance 1 ≤ d ≤ 1000000 indicating a path of length d between
intersection a and a different intersection b. Jimmy may walk a path any
direction he chooses. There is at most one path between any pair of
intersections.
the number of different routes through the forest. You may assume that this
number does not exceed 2147483647
#include<stdio.h>
#include<stdlib.h>
#include<string.h> #define INF 0xfffffff int map[][], disk[], pathnum[];
int n, m; int getmin(int x, int y){
return x > y ? y : x;
} int dis(){
int i, j, visit[], idmin, min;
memset(visit, , sizeof(visit));
for(i = ; i <= n; i ++){
disk[i] = map[][i];
}
disk[] = ;
for(i = ; i <= n; i ++){
idmin = ;
min = INF;
for(j = ; j <= n; j ++){
if(!visit[j] && disk[j] < min){
min = disk[j];
idmin = j;
}
}
visit[idmin] = ;
for(j = ; j <= n; j ++){
if(!visit[j]){
disk[j] = getmin(disk[j], map[idmin][j] + disk[idmin]);
}
}
}
return ;
} int dfs(int start){
int sum, i;
if(start == ){
return ;
}
if(pathnum[start] != -){
return pathnum[start];
}
sum = ;
for(i = ; i <= n; i ++){
if(map[i][start] != INF && map[i][start] == disk[start] - disk[i]){
sum += dfs(i);
}
}
pathnum[start] = sum;
return pathnum[start];
} int main(){
int x, y, d, i, j;
while(scanf("%d", &n) && n){
scanf("%d", &m);
for(i = ; i < ; i ++){
for(j = ; j < ; j ++){
map[i][j] = INF;
}
}
//printf("%d\n", map[1][1]);
for(i = ; i < m; i ++){
scanf("%d %d %d", &x, &y, &d);
map[x][y] = map[y][x] = d;
}
dis();
//printf("%d\n", disk[1]);
memset(pathnum, -, sizeof(pathnum));
//printf("%d\n", pathnum[1]);
printf("%d\n", dfs());
}
return ;
}
杭电1142(最短路径+dfs)的更多相关文章
- 杭电1010(dfs + 奇偶剪枝)
题目: The doggie found a bone in an ancient maze, which fascinated him a lot. However, when he picked ...
- Sum It Up POJ 1564 HDU 杭电1258【DFS】
Problem Description Given a specified total t and a list of n integers, find all distinct sums using ...
- 杭电ACM分类
杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...
- 杭电ACM题单
杭电acm题目分类版本1 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 1005 找规律(循环点) 1006 感觉有点BT的题,我到现在还没过 1007 经典问题,最 ...
- ACM 五一杭电赛码"BestCoder"杯中国大学生程序设计冠军赛小记
对于这项曾经热爱的竞赛,不得不说这是我最后一年参加ACM比赛了,所以要珍惜每一次比赛的机会. 五一去杭电参加了赛码"BestCoder"杯中国大学生程序设计冠军赛,去的队伍包括了今 ...
- 『ACM C++』HDU杭电OJ | 1415 - Jugs (灌水定理引申)
今天总算开学了,当了班长就是麻烦,明明自己没买书却要带着一波人去领书,那能怎么办呢,只能说我善人心肠哈哈哈,不过我脑子里突然浮起一个念头,大二还要不要继续当这个班委呢,既然已经体验过就可以适当放下了吧 ...
- 一个人的旅行 HDU杭电2066【dijkstra算法 || SPFA】
pid=2066">http://acm.hdu.edu.cn/showproblem.php? pid=2066 Problem Description 尽管草儿是个路痴(就是在杭电 ...
- acm入门 杭电1001题 有关溢出的考虑
最近在尝试做acm试题,刚刚是1001题就把我困住了,这是题目: Problem Description In this problem, your task is to calculate SUM( ...
- 杭电acm 1002 大数模板(一)
从杭电第一题开始A,发现做到1002就不会了,经过几天时间终于A出来了,顺便整理了一下关于大数的东西 其实这是刘汝佳老师在<算法竞赛 经典入门 第二版> 中所讲的模板,代码原封不动写上的, ...
随机推荐
- 什么是 docker?
关于 Docker 是什么,有个著名的隐喻:集装箱.但是它却起了个“码头工人”( docker 的英文翻译)的名字.这无疑给使用者很多暗示:“快来用吧!用了 Docker ,就像世界出现了集装箱,这样 ...
- git术语解释staging,index,cache
当我在使用git的时候,有三个东西的出现,一度让我非常困扰,就如题所述,staging,index,和cache. 比如,当我阅读git官网提供的电子书<Pro Git>的时候,最初一章里 ...
- phpStorm 各种快捷键
1. ctrl + shift + n: 打开工程中的文件(类似于eclipse中的ctrl+shift+R),目的是打开当前工程下任意目录的文件. 2. ctrl + j: 输出模板 3. ctrl ...
- 设置MATLAB中figure的背景为白色
matlab的图形窗口每次背景都是灰色的,而我希望每次都是白色的背景,方便用图: 每次总是需要添加figure('color','w');或者figure('color',[1 1 1])或者set( ...
- RequireJS入门(一)
RequireJS由James Burke创建,他也是AMD规范的创始人. RequireJS会让你以不同于往常的方式去写JavaScript.你将不再使用script标签在HTML中引入JS文件,以 ...
- MVC 区域模块
mvc4.0新增的area区域机制,可以协助你在架构较为大型的项目,让独立性较高的部分功能独立成一个MVC子网站,以降低网站与网站之间的耦合性,也可以通过area的切割,让多人同时开发同一个项目时候, ...
- Oracle—RMAN备份(三)
一.增量备份的相关概念 1. 在前面说明了RMAN的完整备份,完整备份是备份所用使用过的块,不备份没有使用的过的块:增量备份只备份自上次备份以来更改过的块. 2.即使RMAN的默认操作是在增量备份时扫 ...
- 解决android自带textview右侧文字不能对齐的问题
package com.sixin.view; import android.content.Context; import android.graphics.Canvas; import andro ...
- C#委托的详细使用
代码如下: public delegate void GreetingDelegate(string name);//定义委托,它定义了可以代表方法的类型 class Program { public ...
- 基于akka实现简单的主从框架
========================Master============================== package com.scala.akka.rpc.demo2 import ...