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 ...
随机推荐
- Single-shot Object Detection
以下转自:http://lanbing510.info/2017/08/28/YOLO-SSD.html 在深度学习出现之前,传统的目标检测方法大概分为区域选择(滑窗).特征提取(SIFT.HOG等) ...
- VUE里面的$(this)
我们很多时候需要用到列表点击其中的某个有相对的事件发生,那就拿用到$(this),但是在vue里面,直接写$(this)获取不到指定的元素,所以我就用的下面这种写法 <div v-for=&qu ...
- JavaWeb_ XML文件
百度百科 传送门 W3school 传送门 XML语言(可扩展标记语言):是一种表示数据的格式,按照xml规则编写的文本文件称为xml文件 Learn 一.编写XML文件 二.DTD约束 三.sche ...
- kafka offset存储
存储方式 方式 方式来源 存储位置 自动提交 kafka kafka 异步提交 kafka kafka checkpoint spark streaming hdfs hbase存储 程序开发 hba ...
- 并发量,tps,qps
QPS/TPS/并发量/系统吞吐量的概念 2017年08月13日 17:24:47 阅读数:10682 我们在日常工作中经常会听到QPS/TPS这些名词,也会经常被别人问起说你的系统吞吐量有多大.这个 ...
- C++入门经典-例3.13-不加break的switch判断语句
1:不加break,会依次运行下面的语句,代码如下: // 3.13.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include &l ...
- 2019年6月Github最新开源java项目
目录 1.halo,这是一个轻快,简洁,功能强大,使用Java开发的博客系统. 2.jeecg-boot 3.CS-Notes 4.JavaGuide 5.advanced-java 6.mall-l ...
- CodeForge源码分享
<a target=_blank href=http://www.codeforge.cn/point/?recoid=2215596>CodeForge源码分享</a>
- LeetCode 47. 全排列 II(Permutations II)
题目描述 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ] 解题思路 类似于LeetCode4 ...
- synchronized 读写同步
synchronized 读写同步 这是一道面试题,很多人也遇到了. 要求:1.读-读 不用线程同步.2.读-写 要求线程同步,写的时候不能读.3.写-写同步.写的时候不能写. java lock读写 ...