博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H. Skiing
阅读量:6027 次
发布时间:2019-06-20

本文共 1805 字,大约阅读时间需要 6 分钟。

 

题意:在这个寒假中,鲍勃有计划在山区度假胜地滑雪。这个滑雪胜地有M个不同的滑雪道和N个不同的标志位于那些转弯处点。从第S标记到第T标志的第i路径具有长度L。每个路径必须遵循降低高度的原则,起点必须严格高于终点。 现在,你应该帮助鲍勃找到最长的滑雪道。

思路:因为说起点必须严格高于终点,所以是一个有向图,而且不可能存在环,可以看作是一个DAG模型, 求DAG上的最长路可以用dp来求,有些时候也可以看作AOE网,这样就可以用拓扑排序来求关键路径来解决了;

代码:

 

#include
#include
#include
#include
#include
using namespace std;#define MP make_pairconst int N = 100000 + 10;const int INF = 0x3f3f3f3f; vector
> edge[N]; class Topological{private: int tot = 0, vis[N], n; queue
Q;public: int in[N], dist[N], topo[N]; void Init(int n){ this -> n = n; for(int i = 1; i <= n; ++ i) vis[i] = 0, dist[i] = - INF; } bool Topo_Sort(){ //拓扑排序 for(int i = 1; i <= n; ++ i){ if(in[i] == 0){ Q.push( i ); vis[i] = true; dist[i] = 0; topo[tot++] = i; } } while(!Q.empty()){ int u = Q.front(); Q.pop(); for(int i = edge[u].size() - 1; i >= 0; -- i){ int v = edge[u][i].first; -- in[v]; if(in[v] == 0 && !vis[v]){ vis[v] = true; Q.push( v ); topo[tot++] = v; } } } return tot == n ? true : false; } int Get_Cpm(){ //求关键路径 for(int i = 0; i < tot; ++ i){ int u = topo[i]; for(int j = edge[u].size() - 1; j >= 0; -- j){ int v = edge[u][j].first; int c = edge[u][j].second; if(dist[v] < dist[u] + c) dist[v] = dist[u] + c; } } int ans = 0; for(int i = 1; i <= n; i++) if(dist[i] > ans) ans = dist[i]; return ans; }}Topo;void Input_data(int &n, int &m){ int u, v, c; scanf("%d %d", &n, &m); Topo.Init( n ); for(int i = 1; i <= m; ++ i){ scanf("%d %d %d", &u, &v, &c); edge[u].push_back(MP(v, c)); ++ Topo.in[v]; }}int main(){ int T, n, m; scanf("%d", &T); while(T --){ Input_data(n, m); Topo.Topo_Sort(); printf("%d\n", Topo.Get_Cpm()); for(int i = 1; i <= n; ++ i) edge[i].clear(); }}

 

转载于:https://www.cnblogs.com/Pretty9/p/7512505.html

你可能感兴趣的文章
MusicXML 3.0 (7) - 连线、延音线
查看>>
Delphi 中的 XMLDocument 类详解(5) - 获取元素内容
查看>>
NIS MAP
查看>>
差异分析定位Ring 3保护模块
查看>>
2013年7月12日“修复 Migration 测试发现的 Bug”
查看>>
vim文本编辑器详解
查看>>
学习vue中遇到的报错,特此记录下来
查看>>
CentOS7 编译安装 Mariadb
查看>>
32位系统和64位系统的选择
查看>>
01配置管理过程指南
查看>>
python 搭配 及目录结构
查看>>
设计模式总结
查看>>
os/exec
查看>>
iOS后台任务,争取一段时间处理后事
查看>>
如何在linux下修改组权限
查看>>
把jpg转换成pdf软件
查看>>
RestTemplate
查看>>
build
查看>>
nutch2.1+mysql报错及解决
查看>>
spring boot打jar包发布
查看>>