热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

图论入门基础教程

图论是计算机科学和数学中的重要分支,本教程旨在为初学者提供全面的基础知识。通过实例解析,如“昂贵的聘礼”问题,讲述了一个年轻探险家在印第安部落与酋长女儿的爱情故事,展示了图论在解决实际问题中的应用。教程内容涵盖了图的基本概念、表示方法以及常见算法,适合各类读者学习。

图论很重要

 

题目:https://vjudge.net/contest/198762#problem/A

A - 昂贵的聘礼

年轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了,于是便向酋长去求亲。酋长要他用10000个金币作为聘礼才答应把女儿嫁给他。探险家拿不出这么多金币,便请求酋长降低要求。酋长说:"嗯,如果你能够替我弄到大祭司的皮袄,我可以只要8000金币。如果你能够弄来他的水晶球,那么只要5000金币就行了。"探险家就跑到大祭司那里,向他要求皮袄或水晶球,大祭司要他用金币来换,或者替他弄来其他的东西,他可以降低价格。探险家于是又跑到其他地方,其他人也提出了类似的要求,或者直接用金币换,或者找到其他东西就可以降低价格。不过探险家没必要用多样东西去换一样东西,因为不会得到更低的价格。探险家现在很需要你的帮忙,让他用最少的金币娶到自己的心上人。另外他要告诉你的是,在这个部落里,等级观念十分森严。地位差距超过一定限制的两个人之间不会进行任何形式的直接接触,包括交易。他是一个外来人,所以可以不受这些限制。但是如果他和某个地位较低的人进行了交易,地位较高的的人不会再和他交易,他们认为这样等于是间接接触,反过来也一样。因此你需要在考虑所有的情况以后给他提供一个最好的方案。
为了方便起见,我们把所有的物品从1开始进行编号,酋长的允诺也看作一个物品,并且编号总是1。每个物品都有对应的价格P,主人的地位等级L,以及一系列的替代品Ti和该替代品所对应的"优惠"Vi。如果两人地位等级差距超过了M,就不能"间接交易"。你必须根据这些数据来计算出探险家最少需要多少金币才能娶到酋长的女儿。
Input
输入第一行是两个整数M&#xff0c;N&#xff08;1 <&#61; N <&#61; 100&#xff09;&#xff0c;依次表示地位等级差距限制和物品的总数。接下来按照编号从小到大依次给出了N个物品的描述。每个物品的描述开头是三个非负整数P、L、X&#xff08;X Output
输出最少需要的金币数。
Sample Input

1 4
10000 3 2
2 8000
3 5000
1000 2 1
4 200
3000 2 1
4 200
50 2 0
Sample Output

5250

题目意思&#xff1a;

    按例子讲&#xff1a;
输入1和4    分别是1个等级差距限制和4个物品&#xff08;相当与主人数&#xff09;&#xff0c;

输入 10000 3 2分别是    10000的价值的物品    3的主人等级   主人提出的两个物品兑换

输入 2 8000      分别是      2号物品&#xff08;主人&#xff09;  &#43;   8000金币数 才能兑换

输入 3 5000    同上

输入1000  2  1   分别是     1000的价值的物品    2的主人等级   主人提出的两个物品兑换

。。。。。。。

5250的得出      从第一个主人开始 &#xff1a; 兑换3号物品&#43;5000  

                        然后 从3号主人开始 &#xff1a; 兑换4号物品&#43;200

                         再然后从4号主人开始 &#xff1a;没有兑换的物品只能付50金币买物品

           所付金币就为   5000&#43;200&#43;50&#61;5250

题解&#xff1a;

 

 

 

dijkstra&#xff08;迪杰斯特拉&#xff09;算法遍历图求最短路&#43;等级制度的处理

dijkstra&#xff08;迪杰斯特拉&#xff09;算法&#xff1a;https://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html&#xff08;里面动态图挺容易懂的&#xff09;

AC代码&#xff1a;&#xff08;网上抄的&#xff09;

#include
#include
#include
using namespace std;

#define INF 0x3f3f3f3f
int mp[1100][1100];
int gg[11000];
int vis[11000];
int dis[11000];
int m,n;

int dijkstra()
{
int i,j;
memset(dis,0,sizeof(dis));
for(i&#61;1; i<&#61;n; i&#43;&#43;)//将从每一个点出发所需要的金币看做0到该点所需要的金币数目
dis[i]&#61;mp[0][i];
for(i&#61;1; i {
int mina&#61;INF;
int u,k;
for(j&#61;1; j<&#61;n; j&#43;&#43;)
{
if(!vis[j] && dis[j] {
mina&#61;dis[j];
u&#61;j;
}
}
vis[u]&#61;1;
for(k&#61;1; k<&#61;n; k&#43;&#43;)
{
if(!vis[k] && mp[u][k]dis[u]&#43;mp[u][k])
dis[k]&#61;dis[u]&#43;mp[u][k];
}
}
return dis[1];//返回每一个点到酋长处所花费的钱数
}

int main()
{
while(~scanf("%d%d",&m,&n))
{
int i,j,a,b,c,e,r;
for(i&#61;0; i<&#61;n; i&#43;&#43;)//初始胡为不能相通
for(j&#61;0; j<&#61;n; j&#43;&#43;)
mp[i][j]&#61;INF;
for(i&#61;1; i<&#61;n; i&#43;&#43;)
{
scanf("%d%d%d",&a,&b,&c);
mp[0][i]&#61;a;//将从每一个点出发所需要的金币看做0到该点所需要的金币数目
gg[i]&#61;b;
for(j&#61;1; j<&#61;c; j&#43;&#43;)
{
scanf("%d%d",&e,&r);
mp[e][i]&#61;r;//单向路径&#xff0c;且等级e低于i&#xff0c;低等级通向高等级
}
}
int minn&#61;INF;
for(i&#61;1; i<&#61;n; i&#43;&#43;)//枚举每一个人为最低等级
{
int mnn&#61;gg[i];
memset(vis,0,sizeof(vis));//注意初始化
for(j&#61;1; j<&#61;n; j&#43;&#43;)//标记等级差距过大&#xff0c;和等级低于自己的人
{
if(gg[j]m)
vis[j]&#61;1;
else
vis[j]&#61;0;
}
int ss&#61;dijkstra();
minn&#61;min(minn,ss);
}
printf("%d\n",minn);
}
return 0;
}

 

转:https://www.cnblogs.com/huangzzz/p/7868429.html



推荐阅读
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
  • Hanks博士是一位著名的生物技术专家,他的儿子Hankson对数学有着浓厚的兴趣。最近,Hankson遇到了一个有趣的数学问题,涉及求解特定条件下的正整数x,而不使用传统的辗转相除法。 ... [详细]
  • 网络流24题——试题库问题
    题目描述:假设一个试题库中有n道试题。每道试题都标明了所属类别。同一道题可能有多个类别属性。现要从题库中抽取m道题组成试卷。并要求试卷包含指定类型的试题。试设计一个满足要求的组卷算 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 探讨了一个包含纯虚函数的C++代码片段,分析了其中的语法错误及逻辑问题,并提出了修正方案。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 尽管在WPF中工作了一段时间,但在菜单控件的样式设置上遇到了一些基础问题,特别是关于如何正确配置前景色和背景色。 ... [详细]
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
  • hlg_oj_1116_选美大赛这题是最长子序列,然后再求出路径就可以了。开始写的比较乱,用数组什么的,后来用了指针就好办了。现在把代码贴 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • Windows Phone 弹出窗口实现方案
    在当前版本的 Silverlight for Windows Phone 中,由于缺乏对 ChildWindow 的支持,开发者需要采用其他方法来实现弹出窗口的功能。本文将探讨几种有效的解决方案。 ... [详细]
  • Markdown 编辑技巧详解
    本文介绍如何使用 Typora 编辑器高效编写 Markdown 文档,包括代码块的插入方法等实用技巧。Typora 官方网站:https://www.typora.io/ 学习资源:https://www.markdown.xyz/ ... [详细]
  • OpenCV中的霍夫圆检测技术解析
    本文详细介绍了如何使用OpenCV库中的HoughCircles函数实现霍夫圆检测,并提供了具体的代码示例及参数解释。 ... [详细]
author-avatar
推球了
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有