第二次
/* THE PROGRAM IS MADE BY PYY */
/*----------------------------------------------------------------------------//
Copyright (c) 2011 panyanyany All rights reserved.
URL : http://acm.hdu.edu.cn/showproblem.php?pid=2066
Name : 2066 一个人的旅行
Date : Friday, August 19, 2011
Time Stage : half an hour
Result:
4453342 2011-08-19 20:45:07 Accepted 2066
31MS 4200K 2070 B
C++ pyy
Test Data:
Review:
一开始忘记注释掉 freopen 函数了,结果悲剧地wrong answer
//----------------------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define max(a, b) (((a) > (b)) ? (a) : (b))
#define min(a, b) (((a) < (b)) ? (a) : (b))
#define infinity 0x7f7f7f7f
#define minus_inf 0x80808080
#define MAXSIZE 1009
int road, neigh, dest, cityNum, minTime ;
int map[MAXSIZE][MAXSIZE], dp[MAXSIZE], used[MAXSIZE], want[MAXSIZE] ;
void dijkstra ()
{
int i, j ;
int minPath, iminPath ;
memset (used, 0, sizeof (used)) ;
// memset (dp, infinity, sizeof (dp)) ;
for (i = 1 ; i <= cityNum ; ++i)
dp[i] = map[0][i] ;
for (i = 1 ; i <= cityNum ; ++i)
{
minPath = infinity ;
iminPath = 0 ; // 这里不用也行,下面会给它赋值的
for (j = 1 ; j <= cityNum ; ++j)
{
if (!used[j] && dp[j] < minPath)
{
iminPath = j ;
minPath = dp[j] ;
}
}
used[iminPath] = 1 ;
for (j = 1 ; j <= cityNum ; ++j)
{
if (!used[j] && dp[iminPath] + map[iminPath][j] < dp[j])
dp[j] = dp[iminPath] + map[iminPath][j] ;
}
}
minTime = dp[want[1]] ;
for (i = 2 ; i <= dest ; ++i)
minTime = min (minTime, dp[want[i]]) ;
}
int main ()
{
// freopen ("C:\\in.txt", "r", stdin) ;
int i, j ;
int a, b, c ;
while (scanf ("%d%d%d", &road, &neigh, &dest) != EOF)
{
memset (map, infinity, sizeof (map)) ;
cityNum = 0 ;
for (i = 1 ; i <= road ; ++i)
{
scanf ("%d%d%d", &a, &b, &c) ;
map[a][b] = map[b][a] = min (map[a][b], c) ;
cityNum = max (cityNum, max (a, b)) ;
}
for (i = 1 ; i <= neigh ; ++i)
{
scanf ("%d", &a) ;
map[0][a] = map[a][0] = 0 ;
}
for (i = 1 ; i <= dest ; ++i)
{
scanf ("%d", &want[i]) ;
}
dijkstra () ;
printf ("%d\n", minTime) ;
}
return 0 ;
}
第一次
/* THE ROGRAM IS MADE BY PYY */
/*----------------------------------------------------------------------------//
URL :
Name :
Date : 2011/4/15 Friday
Time Stage :
Result:
00638009 2011-04-15 01:54:52 Accepted 1001 31 MS 4208 KB Visual C++ pyy
Test Data:
Sample Input
6 2 3
1 3 5
1 4 7
2 8 12
3 8 4
4 9 12
9 10 2
1 2
8 9 10
Sample Output
9
//----------------------------------------------------------------------------*/
#include <iostream>
#include <string.h>
using namespace std;
const int infinite = 0x08080808, maxSize = 1002;
int roads, neighbors, want, cost, maxPoint, minTrip;
int dp[maxSize], map[maxSize][maxSize], wanted[maxSize], mark[maxSize];
void dynamicProgramming()
{
int i, j, k, iminRoad = 0;
int minRoad;
memset( mark, 0, sizeof( mark ) );
for( i = 1; i <= maxPoint; i++ )
dp[i] = map[0][i];
for( i = 1; i <= maxPoint; i++ )
{
minRoad = infinite;
iminRoad = 0;
// 找到所有到0 点的路径中最短的
for( j = 1; j <= maxPoint; j++ )
{
if( !mark[j] && dp[j] < minRoad )
{
iminRoad = j;
minRoad = dp[j];
}
}
mark[iminRoad] = 1;
// 借助该最短路径,查找0 到其他点之间是否有最短路径
for( j = 1; j <= maxPoint; j++ )
{
if( !mark[j] && dp[iminRoad] + map[iminRoad][j] < dp[j] )
{
dp[j] = dp[iminRoad] + map[iminRoad][j];
}
}
}
// 查找0 到wanted 里面所有元素的路径中的最短路径
minTrip = dp[wanted[1]];
for( i = 2; i <= wanted[0]; i++ )
if( dp[wanted[i]] < minTrip )
minTrip = dp[wanted[i]];
}
int main()
{
int i, j, k;
while( cin >> roads >> neighbors >> want )
{
maxPoint = 0;
memset( map, infinite, sizeof( map ) );
for( i = 1; i <= roads; i++ )
{
cin >> j >> k >> cost;
map[j][k] = map[k][j] = min( cost, map[k][j] );
maxPoint = max( maxPoint, max( j, k ) );
}
for( i = 1; i <= neighbors; i++ )
{
cin >> j;
map[0][j] = map[j][0] = 0;
}
for( i = 1; i <= want; i++ )
{
cin >> wanted[i];
}
wanted[0] = want;
dynamicProgramming();
cout << minTrip << endl;
}
return 0;
}
分享到:
相关推荐
《杭电HDU ACM培训课件》是一份珍贵的学习资源,源自杭州电子科技大学的ACM竞赛培训课程。这些课件是官方论坛上分享的,旨在为那些积分不足无法获取资源或者对ACM编程竞赛感兴趣的初学者提供帮助。下面将详细阐述这...
一个十分简单的程序,能够ac杭电hdu的第2050题,无注释,简单明了
计算机网络复习大纲_杭电hdu.pdf
计算机网络复习大纲_杭电hdu整理.pdf
计算机网络复习大纲_杭电hdu参考.pdf
杭电ACM1005题源代码,AC了的程序,无问题……
杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU...
【标签】:“杭电”代表题目来源于杭州电子科技大学,是ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest, ICPC)比赛的一个平台,提供了许多供学生练习和参赛的题目。"ACM"是此类竞赛的...
- VLAN(虚拟局域网)是将一个物理网络划分为多个逻辑网络的方法,可以提高网络安全性,减少广播风暴,并优化流量管理。实验可能涉及了创建、删除VLAN,配置端口VLAN属性,以及设置VLAN间通信。 2. **生成树配置**...
杭电hdu acm资料所用杭电的acm题
每一层都有其特定的任务,例如物理层负责数据的物理传输,数据链路层处理相邻节点间的通信,网络层处理网络间的路由选择,运输层确保数据的可靠传输,而应用层则是用户直接交互的接口。 带宽是衡量网络传输能力的...
【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...
HDU2000至2099题的题目以及AC代码(含思路) 适合刚刚接触ACM的同学哦~ emmmm凑字
总的来说,"acm课件搜索(杭电)(HDU)"这一主题为ACM学习者提供了一个宝贵的资料库,特别是对搜索算法的探讨,有助于参赛者提升在竞赛中的表现。通过深入学习和实践,学生能够熟练掌握DFS和BFS,以及其他相关算法...
包含实验内容:对应实验要求上的1/2/3/5实验,分别为setName/setNice,petree输出进程,模拟shell,进程通信,文件系统。包含全部实验源代码和详尽的word实验报告。同时包含在线PTA编程题目:进程模拟,模拟进程调度...
【标题】"HDU杭电ACM课件完整打包"是一个专门为ACM竞赛初学者准备的资源集合,其中包含了杭州电子科技大学(HDU)的ACM竞赛相关课程资料。这个压缩包提供了丰富的学习材料,旨在帮助新手快速入门并提升算法和编程...
2. **HDU Online Judge**:HDU OJ是杭州电子科技大学维护的一个在线编程竞赛平台,提供丰富的题目供参赛者练习和提交代码,支持多种编程语言,并有自动评分机制。 3. **解题策略**:报告中可能包含不同题目的解题...