ccf 201712-4 行车路线

解题思路:

  首先Dijkstra是基于贪心算法的,即每一次作出的选择都具有贪心选择性。此题由于有“如果连续走小道,小明的疲劳值会快速增加,连续走s公里小明会增加s2的疲劳度。”这种情况,所以不能使用Dijkstra算法。

  这里使用Bellman-Ford算法

70分备份待修改:

 #include<iostream>
#include<cstring>
using namespace std;
int n,m;//n为路口的数量,m为道路的数量
const int maxn = + ;
const int maxm = + ;
const int INF = ;//无穷大
struct node{
int ci,cj;
int type;
int cij;
}path[*maxm]; int Edge[maxn][maxn];//记录两个点之间路径的编号
int dist[maxn];//记录源点1到每一个节点的最短路
int pro[maxn];//记录每一个节点的前驱结点 void bellman()
{
memset(dist,INF,sizeof(dist));
dist[] = ;
memset(pro,-,sizeof(pro));
pro[] = ;//1没有前驱
for(int k=;k<n;k++)///进行n-1次松弛操作
{
bool flag = false;
for(int i=;i<*m;i++)
{
if(path[i].type == )//大道
{
if(dist[path[i].cj] > dist[path[i].ci]+path[i].cij)
{
dist[path[i].cj] = dist[path[i].ci]+path[i].cij;
pro[path[i].cj] = path[i].ci;
flag = true;
}
} else{//小道
//首先要计算出连续走小路多长时间
int con = path[i].cij;
int temp = i;
if(pro[path[i].ci] != - && pro[path[i].ci] != )//已经加入,有前驱
{ int pathnum = Edge[pro[path[temp].ci]][path[temp].ci];
while( path[pathnum].type == )//连续走小道
{
con += path[pathnum].cij;
temp = Edge[pro[path[temp].ci]][path[temp].ci];
if(pro[path[pathnum].ci] == ) break;//到达起始结点
pathnum = Edge[pro[path[temp].ci]][path[temp].ci];
} }
if(dist[path[i].cj]>dist[path[temp].ci] + con*con)
{
dist[path[i].cj]=dist[path[temp].ci] + con*con;
pro[path[i].cj] = path[i].ci;
flag = true;
}
}
}
if(!flag) break;
}
} int main()
{ while(cin>>n>>m)
{
for(int i=;i<*m;i++)
{
cin>>path[i].type>>path[i].ci>>path[i].cj>>path[i].cij;
i++;
path[i].ci = path[i-].cj;path[i].cj = path[i-].ci;
path[i].cij = path[i-].cij;path[i].type = path[i-].type;
Edge[path[i].ci][path[i].cj] = i;
Edge[path[i].cj][path[i].ci] = i-;
} bellman();
cout<<dist[n]<<endl;
}
return ;
}

ccf 201712-4 行车路线(70分)的更多相关文章

  1. ccf 201712-4 行车路线(Python实现)

    一.原题 问题描述 试题编号: 201712-4 试题名称: 行车路线 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将 ...

  2. 洛谷P4559 [JSOI2018]列队 【70分二分 + 主席树】

    题目链接 洛谷P4559 题解 只会做\(70\)分的\(O(nlog^2n)\) 如果本来就在区间内的人是不用动的,区间右边的人往区间最右的那些空位跑,区间左边的人往区间最左的那些空位跑 找到这些空 ...

  3. 「PKUSC2018」星际穿越 (70分做法)

    5371: [Pkusc2018]星际穿越 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 27  Solved: 11[Submit][Status] ...

  4. 洛谷P1979 华容道(70分 暴力)

    P1979 华容道 题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少 ...

  5. 洛谷P1081 开车旅行70分

    https://www.luogu.org/problem/show?pid=1081 太遗憾了明明写出来了,却把最小值初始值弄小了,从第二个点开始就不可能对了.70分! #include<io ...

  6. 华容道 noip2013 70分搜索

    题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 ...

  7. ccf 201712-4 行车路线(30分超时)

    问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将可能的道路分为大道和小道.大道比较好走,每走1公里小明会增加1的疲劳度.小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公 ...

  8. 【CCF CSP】 20171203 行车路线 Java(有问题)80分

    问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将可能的道路分为大道和小道.大道比较好走,每走1公里小明会增加1的疲劳度.小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公 ...

  9. ccf 行车路线

    问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将可能的道路分为大道和小道.大道比较好走,每走1公里小明会增加1的疲劳度.小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公 ...

随机推荐

  1. php三种排序算法

    1. <?php /** * 快速排序不费空间也节省时间 */ $arr=array(5,1,8,2,6,4,9,3,7); // $arr=array(1,2,3,4,5,6,7,8,9); ...

  2. Oracle笔记(一) Oracle简介及安装

    一.轨迹 二.Oracle简介 Oracle是现在全世界最大的数据库提供商,编程语言提供商,应用软件提供商,它的地位等价于微软的地位. Oracle在古希腊神话中被称为“神谕”,指的是上帝的宠儿,在中 ...

  3. bootstap 表格自动换行 截取超长数据

    <table class="table" style="TABLE-LAYOUT:fixed;WORD-WRAP:break_word">

  4. moment.js 使用方法记录

    操作 设值/赋值 1. 具体方法. 1)毫秒(millisecond) moment().millisecond(Number); moment().millisecond(); // Number ...

  5. Java nio 理解

    Java nio 称为Java new IO ,对Java io而言的.他有两个主要的概念:缓存.通道. 在程序中,数据的来源或写入,要么网络.要么硬盘.所有通道分为:文件通道.TCP通道.UDP通道 ...

  6. .net core 读取appsettings 的配置

    { "Logging": { "IncludeScopes": false, "LogLevel": { "Default&quo ...

  7. ios11返回按钮问题

    在苹果系统升级到iOS11之后,页面的返回按钮的点击区域是根据设置的按钮的frame来确定的,在设置按钮太小的时候,点击就会出现点击多次才能点击到一次的现象,处理的方法就是设置按钮的frame变大代码 ...

  8. .Net界面开发必备!DevExpress Blazor UI全新组件助力界面开发

    行业领先的.NET界面控件DevExpress 正式发布了v19.1版本,DevExpress UI for Blazor/ Razor组件附带7个用户界面组件(包括Data Grid和Pivot G ...

  9. 箭头函数中可改变this作用域,回调函数用箭头函数this指向page,自定义事件用箭头函数this指向undefined

    1.回调函数中,用箭头函数改变this的作用域 success: (res)=>{ this.setData({ //此时,this指向page页面 ... }) } 2.自定义事件中,如果使用 ...

  10. python面试题--连续出现最大次数

    确实有段时间没怎么写python,手写还不上机是真的难受. 而且break 跳出循环最内一层的事情都要想一下才能写得出来. 题目如下: 寻找一个字符串最大连续出现次数,并放入字典中, s=" ...