CSU-1830 FarAway
来源:互联网 发布:销售订单软件 编辑:程序博客网 时间:2024/06/06 00:11
概述:忙得不行的主角要从城市1(限定)坐飞机到其他城市,为了多休息所以要尽量挑距离远的城市飞(终点是随意的),而且不满足睡觉时间还不飞(兄弟你很跳啊)
这一题其实可以是说一道模板题,只不过从最短路变成了最长路,但思路是差不多的。对于我来说还是蛮好的,第一次在最短路的题目中使用了vector、队列和pair。
其中有几个要注意的点:1、路径全为单向,且除了城市1以为其他城市只有一条航线可以飞入
2、城市数量的级别比较大,邻接矩阵用不了,上邻接表
3、时间复杂度不用考虑,竟然给了30s,瞎搞吧??
以下是代码:
#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<cstdio>using namespace std;typedef pair<int,int> q;const int maxn=100005;const int maxn1=-1;int d[maxn],C,M,flag1=-1,flag=-1;struct edge{ int to,cost;// to为一条路径的终点,cost为从起点到终点的消耗};vector<edge> ax[maxn];void djkstal(){ priority_queue<q> qq;//放有pair的优先队列,由于是求最大路,直接选用默认的优先队列即可 memset(d,maxn1,sizeof(d)); d[1]=0; qq.push(q(0,1));//设置起点为1,起始距离为0 while(!qq.empty()) { q temp=qq.top(); qq.pop(); if(temp.first<d[temp.second])//保证所求为路径中的最长路,用于剪枝(其实这个不是很懂,有大佬可以讲解一下吗?) continue; for(int i=0;i<ax[temp.second].size();i++) { edge e = ax[temp.second][i]; if(d[e.to]<d[temp.second]+e.cost)//比较大小 { d[e.to]=d[temp.second]+e.cost; if(d[e.to]>=M) { flag1=max(flag1,d[e.to]);//在符合条件的情况下每次比较最大值 } qq.push(q(d[e.to],e.to)); } } }}int main(){ int T; cin>>T; while(T--) { flag1=-1; cin>>C>>M; for(int i=0;i<C-1;i++) { edge e; int a,b,c; scanf("%d%d%d",&a,&b,&c); flag=max(flag,b);//用于设置清除vector的最大下标 e.to=b; e.cost=c; ax[a].push_back(e); } djkstal(); cout<<flag1<<endl; for(int i=1;i<=flag;i++) ax[i].clear(); }}
0 0
- CSU-1830 FarAway
- 文章标题 CSU 1830: FarAway
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CAS-5.1.0-RC3 作为Gradle项目导入Eclipse
- 关于 MySQL 你可能不知道的 SQL 使用技巧
- dlib, OpenFace and face_recognition
- epoll详解
- 题目1030:毕业bg
- CSU-1830 FarAway
- Android 软键盘汇总
- CSS---使用flex布局做响应式页面
- 解决AndroidStudio添加ProjectLibary后在编译时遇到的各种问题之解决方式索引(finished with non-zero exit value and so on...)
- 廖雪峰Python的研读笔记(二) 函数式编程
- C# 操作EXCEL文件
- Java实现全排列、组合算法
- Spring注入Date类型的数据到Bean中
- SpringMVC分布式架构