第四届“图灵杯”NEUQ-ACM程序设计人赛真题重现


前言

提示:代码以AC,如果没有会在代码前进行说明


系列文章目录

第四届“图灵杯”NEUQ-ACM程序设计人赛真题重现

第五届“图灵杯”NEUQ-ACM程序设计个人赛真题重现

第六届“图灵杯”NEUQ-ACM程序设计人赛真题重现

第七届“图灵杯”NEUQ-ACM程序设计个人赛真题重现


一、蔡老板的会议

题目描述

图灵杯个人赛就要开始了,蔡老板召集俱乐部各部门的部长开会。综合楼有N (1<=N<=1000)间办公室,编号1~N每个办公室有一个部长在工(mo)作(yu),其中X号是蔡老板的办公室,会议也将在X(1<=X<=N)号办公室举行。综合楼的构造极其特殊,这N个办公室之间M(1<=M<=100,000)条单向走廊。通过第i条路将需要花费Ti(1<=Ti<=100)单位时间。
由于工作很忙,开完会之后各部长需要返回自己的办公室。他们会选择最短时间的最优路径。
为了合理安排接下来的工作,蔡老板想知道,【来回最久的】【!!!】那个部长在路上花费的时间是多少。

输入描述
第一行:用空格隔开的三个数N,M和X
接下来的M行:每行有用空格隔开的三个数Ai,Bi和Ti,表示从A点到B点花费的时间Ti

输出描述
一个int型的数,表示花费时间的最大值

样例输入
4 4 1
1 2 1
2 3 1
3 4 3
4 1 3

样例输出
8

分析

单向图求最短路径,果断Dijkstra

AC代码如下:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1005;
const int inf = 0x3f3f3f3f;
int n, m, x;
int mp1[maxn][maxn],mp2[maxn][maxn];
int dis1[maxn], dis2[maxn];
int visit[maxn];
 
void djsitela(int (*mp)[1005], int * dis)
{
   
   
	memset(visit,0,sizeof(visit));
	
	visit[x] = 1;
	
	for(int i = 1;i <= n;i ++)
	dis[i] = mp[x][i];
	
	for(int i = 1;i <= n;i ++)
	{
   
   
		int k = -1, minn = inf;
		for(int j = 1;j <= n;j ++)
		{
   
   
			if(!visit[j] && dis[j] < minn)
			{
   
   
				minn = dis[j];
				k = j;
			}
		}
		
		if(k == -1 )
		break;
		
		visit[k] = 1;
		
		for(int j = 1;j <= n;j ++)
		{
   
   
			if(!visit[j] && dis[j] > dis[k] + mp[k][j])
			dis[j] = dis[k
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值