KIDx 的解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2962
题意:找能够到达终点的最大高度下的最短路
这样的效率排第七,,中规中矩吧,用的是前插链接表的spfa实现,当然我还开了输入外挂,此代码中木有加外挂
#include <iostream>
#include <queue>
using namespace std;
#define inf 0x3fffffff
#define M 1005
struct edge{
int v, w, h, next;
}e[2000005];
int pre[M], cnt, dist[M], n;
bool inq[M];
void init ()
{
cnt = 0;
memset (pre, -1, sizeof(pre));
}
void addedge (int u, int v, int w, int h) //慢慢模拟就会明白的
{
e[cnt].v = v;
e[cnt].w = w;
e[cnt].h = h;
e[cnt].next = pre[u]; //接替已有边
pre[u] = cnt++; //自己成为u派生的第一条边
}
void spfa (int u, int lim)
{
int v, w, i;
for (i = 1; i <= n; i++)
dist[i] = inf, inq[i] = false;
dist[u] = 0;
queue<int> q;
q.push (u);
inq[u] = true;
while (!q.empty())
{
u = q.front();
q.pop();
inq[u] = false;
for (i = pre[u]; i != -1; i = e[i].next)
{
if (e[i].h < lim) continue;
w = e[i].w;
v = e[i].v;
if (dist[u] + w < dist[v])
{
dist[v] = dist[u] + w;
if (!inq[v])
{
q.push (v);
inq[v] = true;
}
}
}
}
}
int main()
{
int m, u, v, w, h, l, r, mid, cc = 1, res;
while (scanf ("%d%d", &n, &m), (n||m))
{
if (cc > 1) printf ("\n");
init();
while (m--)
{
scanf ("%d%d%d%d", &u, &v, &h, &w);
if (h == -1) h = inf;
addedge (u, v, w, h);
addedge (v, u, w, h); //双向前插加边
}
scanf ("%d%d%d", &u, &v, &h);
l = 0, r = h, res = inf;
while (l < r) //简单二分枚举高度,使高度尽量大
{
mid = (l+r+1) >> 1;
spfa (u, mid);
if (dist[v] != inf)
l = mid, res = dist[v];
else r = mid - 1;
}
printf ("Case %d:\n", cc++);
if (res != inf)
printf ("maximum height = %d\nlength of shortest route = %d\n", l, res);
else puts ("cannot reach destination");
}
return 0;
}
- 大小: 35.1 KB
分享到:
相关推荐
acm入门之枚举搜索,学校第一次acm培训,包括枚举及其优化,dfs和bfs
在本话题中,我们关注的是一个名为"HDU-EID-V2-核心板1"的特定设计,它涉及到STM32的核心组件、接口、电源管理和调试配置。 首先,核心板设计中提到了F103和F207两个型号的STM32芯片。F103和F207属于STM32的不同...
【标题】"hdu acm教案5-7"所涉及的知识点主要集中在ACM(International Collegiate Programming Contest,国际大学生程序设计竞赛)的教学内容中,这部分教程覆盖了第5到第7节的关键概念和技巧。ACM竞赛是全球范围内...
HDU(杭州电子科技大学)在线评测系统是许多编程竞赛爱好者和学习者经常访问的平台,它提供了大量的算法题目供用户练习和挑战。这个压缩包文件“HDU 2000-2099 解题报告”显然包含了在这个题号范围内的一些问题、...
HDU ACM教案8-11是一系列针对ACM(国际大学生程序设计竞赛)的培训教程,这个资源集合了第8到11章的教学内容,旨在帮助参赛者提升算法设计和编程能力。ACM竞赛是全球知名的编程比赛,对参赛者的逻辑思维、问题解决和...
2. Bellman-Ford算法:Bellman-Ford算法可以处理存在负权重边的情况,通过松弛操作不断更新节点间的最短路径,重复V-1遍后可确保找到最短路,因为不存在V条边构成的负权环。 3. Floyd-Warshall算法:该算法适用于...
1. **动态规划**:动态规划是一种用于解决最优化问题的常用方法,例如背包问题、最长公共子序列、矩阵链乘法等。解题报告会解释如何定义状态、设计状态转移方程,并给出具体代码实现。 2. **图论算法**:包括最短...
2012-06-11 15:20 42,528 c#仿QQ好友界面.rar 2012-06-11 15:22 216,281 ChineseChessV1.rar 2012-06-11 15:39 7,113,300 CS仿真程序.zip 2012-06-11 15:48 88,895 C与FORTRAN共舞.TXT 2012-06-11 15:30 122,880 ...
HDU-EID-V2-扩展板1是一款专为STM32微控制器设计的硬件扩展板,主要用于增强核心板的功能。该扩展板具有多种接口和功能,包括ADC(模数转换器)、电位器、DAC(数模转换器)输出以及TEST_V跳线,能够满足用户在模拟...
最精准的答案(本人做对的题目拿上来给大家呈现)!不要忘记是C++编的
具体地,题目涉及到了斐波那契数列的一个变种:F(1)=1, F(2)=1, F(3)=1, F(4)=1, F(n>4)=F(n-1)+F(n-2)+F(n-3)+F(n-4),其中n > 4。这里的关键是要能够计算出F(n)的值,而由于这个序列的增长速度非常快,传统的整数...
hdu-OS-simple-shell,Linux_的_Shell_命令窗口_demo_版实现_shell-demo
《ACM HDU 2000-2099 解题报告 杭电 ACM》是一份详尽的编程竞赛解题集,主要涵盖了杭电(Hangzhou Dianzi University)在线判题系统(HDU OJ)上的2000至2099号题目。这份解题报告是针对参与ACM/ICPC(国际大学生...
HDU(杭州电子科技大学在线评测系统)是一个知名的编程竞赛平台,为编程爱好者提供了大量的算法题目进行练习和比赛。这个名为"HDU-2000-2099.rar_hdu"的压缩包包含了该平台从2000到2099共100道题目的源代码。这些...
【标题】"HDU-2000-2099.zip_hdu2000" 是一个包含杭电(Hangzhou Dianzi University)ACM竞赛题目解题报告的压缩包,覆盖了编号从2000到2099的题目。这个资源对于学习算法、提高编程技巧以及准备ACM/ICPC(国际大学...
1. **Girls and Boys (HDU 1068)** - **知识点**:本题考察的是最大匹配的基础概念。通常可以通过匈牙利算法或Kuhn-Munkres算法(KM算法)解决。 - **解题思路**:建立二分图,一边是男孩,另一边是女孩,然后...
描述中提到的"求多源点到单终点的最短路(反向建图)"进一步说明了问题的核心是找到从多个起点到一个固定终点的最短路径,并且采用了“反向建图”的策略。 在图论中,最短路径问题是一个经典问题,通常我们使用 ...
1. 题目理解:仔细阅读题目,明确输入输出要求,理解问题背景和限制条件。 2. 算法选择:根据问题性质选择合适的算法,如动态规划、贪心算法、回溯法等。 3. 编程实现:清晰地组织代码,注重效率和可读性,避免不必...