问题描述:

A 国正面临着一场残酷的战争,城市被支持不同领导的两股势力占据,作为一个商人,M先生并不太关心政治,但是他知道局势很严重,他希望你能救他出去。M 先生说:“为了安全起见,我们的路线最多只能包含一条连接两股不同势力城市的道路”。M 先生想知道最快多久能到达目的地。

数据输入:

第一行 N(2<=N<=600),代表城市个数。第二行 M(0<=M<=10000),代表道路条数。接 下 来 M 行 每 行 三 个 数 A,B,T 。 代 表 一 条 从 城 市 A 到 城 市 B 的 路 需 要 耗 时

T(1<=T<=1500)。接下来一行 N 个数,这些数只会是 1 或者 2,第 i 个数字代表第 i 个城市属于第几股势力。

为了简化问题,我们假设开始时 M 先生在城市 1,目的地是城市 2,城市 1 属于第 1 股势力,城市 2 属于第 2 股势力。道路是双向的。数据保证没有重边。

结果输出:

输出最少需要的时间。如果无法到达则输出-1。

输入示例:

2

1

1 2 100

1 2

3

3

1 2 100

1 3 40

2 3 50

1 2 1

5

5

3 1 200

5 3 150

2 5 160

4 3 170

4 2 170

1 2 2 2 1

输出示例:

100

90

540

“我们的路线最多只能包含一条连接两股不同势力城市的道路”故只能找到到到达某个城市后再到城市2最短路径。

代码12/17上传

---------------

先找出城市1到势力1所有节点的最短路径,城市2到势力2所有点的最短路径。

然后枚举从1到某个城市,再从这个城市到2的最短路。

#include<cstdio>
const int MAXN=600+5;
const int INF=999999;
int force[MAXN];
int map[MAXN][MAXN];
int dis[3][MAXN],n;
void Dijkstra(int kind)
{
int cur=kind;
bool vis[MAXN]={0};
vis[cur]=true;
dis[kind][cur]=0; int i,j;
for(i=1;i<=n;i++)
{
int mini=INF;
for(j=1;j<=n;j++)
if(map[cur][j]!=INF && force[j]==kind && map[cur][j] + dis[kind][cur] < dis[kind][j] )
dis[kind][j]=map[cur][j] + dis[kind][cur]; for(j=1;j<=n;j++)
if(!vis[j] && dis[kind][j] < mini)
mini=dis[kind][cur=j]; vis[cur]=true;
}
} int main()
{
int i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
map[i][j]=INF; int m;
scanf("%d",&m); for(i=0;i<m;i++)
{
int a,b,t;
scanf("%d%d%d",&a,&b,&t);
map[a][b]=map[b][a]=t;
} for(i=1;i<=n;i++)
{
scanf("%d",&force[i]);
dis[1][i]=dis[2][i]=INF;
} Dijkstra(1);
Dijkstra(2); int ans=map[1][2],temp;
for(j=1;j<=n;j++)
{
for(i=1;i<=n;i++)
{
if(force[i]!=force[j])
{
temp=map[i][j] + dis[1][j] + dis[2][i];
if(temp<ans)
ans=temp;
}
}
} if(ans!=INF)
printf("%d\n",ans);
else
printf("-1\n"); return 0;
}

数据结构与算法实验题 7.1 M 商人的求救的更多相关文章

  1. 数据结构与算法实验题7.1 M 商人的求救

    问题描述:A 国正面临着一场残酷的战争,城市被支持不同领导的两股势力占据,作为一个商人,M先生并不太关心政治,但是他知道局势很严重,他希望你能救他出去.M 先生说:“为了安全起见,我们的路线最多只能包 ...

  2. 数据结构与算法实验题 6.1 s_sin’s bonus

    数据结构与算法实验题 6.1 s_sin's bonus ★实验任务 正如你所知道的 s_sin 是一个非常贪玩的人 QAQ(如果你非常讨厌他请直接从第二段开 始看),并且令人感到非常遗憾的是,他是一 ...

  3. 数据结构与算法实验题 9.1 K 歌 DFS+剪枝

    数据结构与算法实验题 K 歌 ★实验任务 3* n 个人(标号1~ 3 * n )分成 n 组 K 歌.有 m 个 3 人组合,每个组合都对应一个分数,你能算出最大能够得到的总分数么? ★数据输入 输 ...

  4. 数据结构与算法实验题 4.2 Who is the strongest

    数据结构与算法实验题 4.2 Who is the strongest ★实验任务 在神奇的魔法世界,召唤师召唤了一群的魁偶.这些魁偶排成一排,每个魁偶都有一个 战斗值.现在该召唤师有一个技能,该技能 ...

  5. HDU 3791 二叉搜索树 (数据结构与算法实验题 10.2 小明) BST

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3791 中文题不说题意. 建立完二叉搜索树后进行前序遍历或者后序遍历判断是否一样就可以了. 跟这次的作业第 ...

  6. 数据结构与算法实验题6.1 s_sin’s bonus byFZuer

    玩家从n 个点n-1 条边的图,从节点1 丢下一个小球,小球将由于重力作用向下落,而从小球所在点延伸出的每一条边有一个值pi 为小球通过该条边的概率(注意从同一个节点向下延伸的所有边的pi 的和可以小 ...

  7. DS实验题 Dijkstra算法

    参考:Dijkstra算法 数据结构来到了图论这一章节,网络中的路由算法基本都和图论相关.于是在拿到DS的实验题的时候,决定看下久负盛名的Dijkstra算法. Dijkstra的经典应用是开放最短路 ...

  8. 大公司面试经典数据结构与算法题C#/Java解答

    几个大公司(IBM.MicroSoft and so on)面试经典数据结构与算法题C#解答 1.链表反转 我想到了两种比较简单的方法 第一种是需要开一个新的链表,将原链表的元素从后到前的插入到新链表 ...

  9. 【算法】数据结构与算法基础总览(中)——刷Leetcode等算法题时一些很实用的jdk辅助方法锦集

    最近重新学习数据结构与算法以及刷leetcode算法题时,发现不少jdk自带的方法可以提升刷题的效率.这些小技巧不仅仅对刷算法题带来便利,对我们平时开发也是很有帮助的.本文以java语言为基础,记录了 ...

随机推荐

  1. 汉化 Hirens.BootCD 中的 XP 系统

    汉化 Hirens.BootCD 中的 XP 系统 1. 在中文版 XPSP3 镜像中提取所需的文件 原系统为没有作 server pack 的 Windows XP Professional ,在W ...

  2. linux/unix 基本概念的认识(sha-bang 、PPA)

    PPA:Personal Package Archives : Ubuntu: 比如为安装 emacs,需要首先添加某个PPA: sudo add-apt-repository ppa:cassou/ ...

  3. 1.Node.js

    转自:http://www.runoob.com/nodejs/nodejs-tutorial.html 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基 ...

  4. Exploring Micro-frameworks: Spring Boot--转载

    原文地址:http://www.infoq.com/articles/microframeworks1-spring-boot Spring Boot is a brand new framework ...

  5. Spark MLlib LDA 源代码解析

    1.Spark MLlib LDA源代码解析 http://blog.csdn.net/sunbow0 Spark MLlib LDA 应该算是比較难理解的,当中涉及到大量的概率与统计的相关知识,并且 ...

  6. 一筐梨子&amp;一筐水果——协变性(covariant)

    假设突然看见这个问题.我们常常会想当然. 一个梨子是水果,一筐梨子是一筐水果吗? watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXFqMjA2NQ==/f ...

  7. Warning: Division by zero in 错误处理

    Warning: Division by zero in 错误处理 今天调试一段代码,结果提示 Warning: Division by zero in ,没有扫到答案,最后发现 $dir/$name ...

  8. 2lession-文件访问

    今天继续学习python,因为是根据网上的教程,里面用到了一些例子,包含有后面的知识点.但是,因为自己稍微有点c.java等语言基础,所以并没有严格按照教程来学习,反而是遇到知识点就记录下来. 代码如 ...

  9. 28. Spring Boot配置方式

    转自:https://blog.csdn.net/webzhuce/article/details/54564019

  10. java 文件读写--转载

    读文件 http://www.baeldung.com/java-read-file Java – Read from File 1. Overview In this tutorial we’ll ...