2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H. Skiing
题意:在这个寒假中,鲍勃有计划在山区度假胜地滑雪。这个滑雪胜地有M个不同的滑雪道和N个不同的标志位于那些转弯处点。从第S标记到第T标志的第i路径具有长度L。每个路径必须遵循降低高度的原则,起点必须严格高于终点。 现在,你应该帮助鲍勃找到最长的滑雪道。
思路:因为说起点必须严格高于终点,所以是一个有向图,而且不可能存在环,可以看作是一个DAG模型, 求DAG上的最长路可以用dp来求,有些时候也可以看作AOE网,这样就可以用拓扑排序来求关键路径来解决了;
代码:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
#define MP make_pair
const int N = + ;
const int INF = 0x3f3f3f3f;
vector<pair<int, int> > edge[N];
class Topological{
private:
int tot = , vis[N], n;
queue<int> Q;
public:
int in[N], dist[N], topo[N];
void Init(int n){
this -> n = n;
for(int i = ; i <= n; ++ i)
vis[i] = , dist[i] = - INF;
}
bool Topo_Sort(){ //拓扑排序
for(int i = ; i <= n; ++ i){
if(in[i] == ){
Q.push( i );
vis[i] = true;
dist[i] = ;
topo[tot++] = i;
}
}
while(!Q.empty()){
int u = Q.front(); Q.pop();
for(int i = edge[u].size() - ; i >= ; -- i){
int v = edge[u][i].first;
-- in[v];
if(in[v] == && !vis[v]){
vis[v] = true;
Q.push( v );
topo[tot++] = v;
}
}
}
return tot == n ? true : false;
}
int Get_Cpm(){ //求关键路径
for(int i = ; i < tot; ++ i){
int u = topo[i];
for(int j = edge[u].size() - ; j >= ; -- 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 = ;
for(int i = ; 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 = ; 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 = ; i <= n; ++ i) edge[i].clear();
}
}
2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H. Skiing的更多相关文章
- Skiing 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛H题(拓扑序求有向图最长路)
参考博客(感谢博主):http://blog.csdn.net/yo_bc/article/details/77917288 题意: 给定一个有向无环图,求该图的最长路. 思路: 由于是有向无环图,所 ...
- HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)
HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛) Panda Time Limit: 10000/4000 MS (Java/Others) Memory Limit: ...
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H Skiing【拓扑排序,关键路径】
2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H Skiing In this winter holiday, Bob has a plan for skiing at the moun ...
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 M. Frequent Subsets Problem【状态压缩】
2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 M. Frequent Subsets Problem 题意:给定N和α还有M个U={1,2,3,...N}的子集,求子集X个数,X满足:X是U ...
- 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)
摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...
- ICPC 2018 徐州赛区网络赛
ACM-ICPC 2018 徐州赛区网络赛 去年博客记录过这场比赛经历:该死的水题 一年过去了,不被水题卡了,但难题也没多做几道.水平微微有点长进. D. Easy Math 题意: ...
- 【2017 ACM/ICPC 乌鲁木齐赛区网络赛环境测试赛 E】蒜头君的排序
[链接]h在这里写链接 [题意] 在这里写题意 [题解] 莫队算法+树状数组. 区间增加1或减少1. 对逆序对的影响是固定的. (用冒泡排序变成升序的交换次数,就是逆序对的个数) [错的次数] 0 [ ...
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H. Skiing (拓扑排序+假dp)
题目链接:https://nanti.jisuanke.com/t/16957 题目: In this winter holiday, Bob has a plan for skiing at the ...
- 2017 ACM-ICPC(乌鲁木齐赛区)网络赛 H.Skiing 拓扑排序+最长路
H.Skiing In this winter holiday, Bob has a plan for skiing at the mountain resort. This ski resort h ...
随机推荐
- TensorFlow使用记录 (一): 基本概念
基本使用 使用graph来表示计算任务 在被称之为Session的上下文中执行graph 使用tensor表示数据 通过Variable维护状态 使用feed和fetch可以为任意的操作(op)赋值或 ...
- A.Equivalent Prefixes(ST算法)
Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 ...
- windows管理员权限激活
第一步:计算机-右键--管理--选择用户,选择administrator用户--取消勾选:账户禁用 第二步:alt+ctrl+delete,快捷键调出资源管理器--点击切换用户 第三步:显示出现adm ...
- Maven中的dependency的scope作用域
1.test范围指的是测试范围有效,在编译和打包时都不会使用这个依赖 2.compile范围指的是编译范围有效,在编译和打包时都会将依赖存储进去 3.provided依赖:在编译和测试的过程有效,最后 ...
- maven的依赖传递及冲突
A->B(compile) 第一关系: a依赖b compile B->C(compile) 第二关系: b依赖c compile 当在A中配置 <dep ...
- 菜鸟requireJS教程---2、基本知识
菜鸟requireJS教程---2.基本知识 一.总结 一句话总结: 1.requireJS中的api就define(比如定义自己的函数)和require 2.requireJS使用的话就是配置req ...
- Mac-连接Windows远程桌面软件
链接:https://download.csdn.net/download/ab601026460/9885775 https://blog.csdn.net/ab601026460/article/ ...
- MySQL 数据库 常用函数
一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ABS(x) 返回x的绝对值 SELECT ABS(-1) -- 返回1 CEIL(x),CEILING(x) 返回大于或等于x的最小整数 ...
- 查看Linux基本系统信息
#! /bin/bash #The scripts will return the system infomation #return hostname and version infomation ...
- Linux高级调试与优化——Address Sanitizer
Address Sanitizer ASAN最早可以追溯到 LLVM 的 sanitizers项目(https://github.com/google/sanitizers),这个项目包含了Addre ...