首页 > 其他分享 >CCF201712-4行车路线

CCF201712-4行车路线

时间:2024-09-11 19:24:21浏览次数:3  
标签:行车 小明 CCF201712 疲劳度 路口 路线 mp1 505 小道

题目

问题描述

  小明和小芳出去乡村玩,小明负责开车,小芳来导航。
  小芳将可能的道路分为大道和小道。大道比较好走,每走1公里小明会增加1的疲劳度。小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公里小明会增加s2的疲劳度。
  例如:有5个路口,1号路口到2号路口为小道,2号路口到3号路口为小道,3号路口到4号路口为大道,4号路口到5号路口为小道,相邻路口之间的距离都是2公里。如果小明从1号路口到5号路口,则总疲劳值为(2+2)^2+2+2^2=16+2+4=22。
  现在小芳拿到了地图,请帮助她规划一个开车的路线,使得按这个路线开车小明的疲劳度最小。

输入格式

  输入的第一行包含两个整数nm,分别表示路口的数量和道路的数量。路口由1至n编号,小明需要开车从1号路口到n号路口。
  接下来m行描述道路,每行包含四个整数tabc,表示一条类型为t,连接ab两个路口,长度为c公里的双向道路。其中t为0表示大道,t为1表示小道。保证1号路口和n号路口是连通的。

输出格式

  输出一个整数,表示最优路线下小明的疲劳度。

样例输入

6 7
1 1 2 3
1 2 3 2
0 1 3 30
0 3 4 20
0 4 5 30
1 3 5 6
1 5 6 1

样例输出

76

样例说明

  从1走小道到2,再走小道到3,疲劳度为5^2=25;然后从3走大道经过4到达5,疲劳度为20+30=50;最后从5走小道到6,疲劳度为1。总共为76。

数据规模和约定

  对于30%的评测用例,1 ≤ n ≤ 8,1 ≤ m ≤ 10;
  对于另外20%的评测用例,不存在小道;
  对于另外20%的评测用例,所有的小道不相交;
  对于所有评测用例,1 ≤ n ≤ 500,1 ≤ m ≤ 10*5,1 ≤ ab ≤ nt是0或1,c ≤ 10^5。保证答案不超过10^6。

思路

        这题刚开始我用的是dfs暴力搜索,然后运行超时,后来我就先将小路每段相对较小的路径算出来,再利用宽度优先搜索的思想,找出从1到每一点的最优路径。

代码

#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define LL long long

LL mp1[505][505],n,m;
LL mp2[505][505];
LL dist[505][2];

typedef struct node{
    LL u,d;
    bool big;
    bool operator < (const node &y)const{
        return u > y.u;
    }
}node;
node beg,in,out;

void smallpath() {
    for(int k = 1; k <= n; k++) {
    	for(int i = 1; i <= n; i++) {
    		for(int j = 1; j <= n; j++) {
    			if(mp1[i][j] > mp1[i][k]+mp1[k][j]) {
    				mp1[i][j] = mp1[i][k] + mp1[k][j];
				}
			} 
		}	  	
	}   
    for(int i = 1; i <= n; i++) {
    	for(int j = 1; j <= n; j++) {
        	if(mp1[i][j] != INF) {
        		mp1[i][j] *= mp1[i][j];
			}
    	}
	}
    
}

void init(LL x) {
    for(int i = 1; i <= x; i++) {
    	for(int j = 1; j<= x;j++) {
    		mp2[i][j] = mp1[i][j] = INF;
		}
	}   
}


LL fun() {
    priority_queue<node> Q;
    beg.big = 1;
	beg.u = 1;
	beg.d = 0;
    for(int i = 1; i <= n; i++) {
    	if(i == 1) {
    		dist[i][0] = dist[i][1] = 0;
		}
		else{
			dist[i][0] = dist[i][1] = INF;
		}
	}
    Q.push(beg);
    while(!Q.empty()) {
        out = Q.top();
		Q.pop();
        LL u = out.u,d = out.d;
        for(int i = 1; i <= n; i++) {
            if(u == i) {
            	continue;
			}
            if(out.big && mp1[u][i]!=INF) {
                in.big = 0;
				in.u = i;
				in.d = mp1[u][i]+d;
                if(in.d <= dist[i][1]) {
					dist[i][1] = in.d;
					Q.push(in);
				}
            }
            if(mp2[u][i] != INF) {
                in.big = 1;
				in.u = i;
				in.d = mp2[u][i]+d;
                if(in.d <= dist[i][0]) {
					dist[i][0] = in.d;
					Q.push(in);
				}
            }
        }
    }
    return min(dist[n][0],dist[n][1]);
}

int main(){
    LL t,a,b,c;
    cin >> n >> m;
    init(n);
    int ans = 0;
    for(int i = 0; i < m; i++) {
        cin >> t >> a >> b >> c;
        if(t) {
        	mp1[a][b] = mp1[b][a] = min(c,mp1[b][a]);
		}
        else{
        	mp2[a][b] = mp2[b][a] = min(c,mp2[b][a]);
		} 
    }
    smallpath();
    cout << fun() << endl;
    return 0;
}

标签:行车,小明,CCF201712,疲劳度,路口,路线,mp1,505,小道
From: https://blog.csdn.net/2301_77214603/article/details/142133369

相关文章

  • 大模型学习路线,现在转大模型还来得及吗?
    大模型学习路线,从基础入门到项目实战!第一阶段:AI大模型时代理解大模型大模型提示工程第二阶段:AI大模型API应用开发工程3.理解FunctionCalling4.RAG与Embedding5.向量数据库6.OpenAIGPTs与AssistantAPI7.实战项目二:基于大模型的文档智能助手8.实战项目三:基......
  • Python 基础学习路线图【有PDF版】
    从遗忘到铭记:我的Python学习之旅曾经,学习对我来说就像一场匆匆的旅行——沿途的风景虽美,但转瞬即逝。除了那些在工作中反复磨练的技能,大多数知识仿佛过客般匆匆离去。尽管日复一日地忙碌着,每当被问及“你究竟学到了什么?”时,脑海中却一片空白。归其原因还是因为学习的内容比较杂乱......
  • 网络安全自学入门:(超详细)从入门到精通学习路线&规划,学完即可就业
     很多人上来就说想学习黑客,但是连方向都没搞清楚就开始学习,最终也只是会无疾而终!黑客是一个大的概念,里面包含了许多方向,不同的方向需要学习的内容也不一样。算上从学校开始学习,已经在网安这条路上走了10年了,无论是以前在学校做安全研究,还是毕业后在百度、360从事内核安全产......
  • 网络安全自学入门:(超详细)从入门到精通学习路线&规划,学完即可就业
     很多人上来就说想学习黑客,但是连方向都没搞清楚就开始学习,最终也只是会无疾而终!黑客是一个大的概念,里面包含了许多方向,不同的方向需要学习的内容也不一样。算上从学校开始学习,已经在网安这条路上走了10年了,无论是以前在学校做安全研究,还是毕业后在百度、360从事内核安全产......
  • 电动自行车轮胎规格参数图解教程 All In One
    电动自行车轮胎规格参数图解教程AllInOne电动车轮胎参数单位换算1in/1英寸=>2.54cm/2.54厘米https://convertlive.com/zh/u/转换/英寸/自/厘米#10轮胎参数轮胎尺寸(英寸):轮毂尺寸(英寸):10in轮胎宽度/断面宽度(厘米):7.6cm轮胎壁高度(厘米):7.6cm......
  • 嵌入式学习路线+嵌入式校招建议 嵌入式学习面试规划
    随着物联网、人工智能以及5G等技术的迅猛发展,嵌入式系统的需求逐渐增多。作为毕业生,如何制定一个合理的学习路线,以确保在找工作、参加校招时有足够的竞争力,是非常重要的。我会为你提供一个更加详细、系统的学习路线建议,帮助你避免迷失方向。一、初级阶段——基础入门目标......
  • Java初级学习路线概要~
    前言如果你刚刚开始学习Java,掌握基础知识是关键。本文将提供一个详细的Java初级学习路线,帮助各位看官从基础开始,逐步掌握Java编程语言的核心概念。1.Java语言基础 1.1Java简介-**Java介绍**:Java是一种广泛使用的编程语言,以其跨平台特性和面向对象设计而著名。......
  • 面向对象编程的学习路线
    一、基础概念面向对象编程的基本概念面向对象编程是一种编程范式,它将数据和操作数据的方法封装在对象中。通过使用类和对象,我们可以更好地组织和管理代码。在面向对象编程中,我们可以使用继承、多态和封装等特性来提高代码的可重用性、可扩展性和可维护性。学习面向对象编程的基本概......
  • 280java jsp SSM Springboot旅游推荐系统旅游景点路线管理(源码+文档+开题+PPT+运行视
    项目技术:Springboot+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows......
  • 基于GA遗传优化的TSP问题最优路线规划matlab仿真
    1.程序功能描述旅行商问题(TravelingSalesmanProblem,TSP)是计算机科学和运筹学中的经典问题,其目标是寻找访问一系列城市并返回起始城市的最短可能路线。此问题属于NP-难问题,对于大规模的实例,精确的求解方法在计算上不可行。因此,启发式方法,特别是遗传算法(GeneticAlgorithms,GA),......