SCOJ4427 / TOPOI 4404: Miss Zhao's Graph 解题报告
题目链接
SCOJ
TOPOI
题目描述
Problem
给定一个包含n个顶点m条边的带权有向图,找一条边数最多的路径,且路径上的边的权值严格递增。
图中可能有重边和自环。
Input Data
第一行,两个整数n和m,表示顶点数和边数。
接下来m行,每行三个整数u,v,w,表示顶点u到顶点v有一条权值为w的边。
Output Data
一行,一个整数。
Input Sample 1
3 3
1 2 1
2 3 2
3 1 3
Output Sample 1
3
Input Sample 2
6 7
1 2 1
3 2 5
2 4 2
2 5 2
2 6 9
5 4 3
4 3 4
Input Sample 2
6
Data Limit
题目思路
由于我太弱了,想不出更好的做法 ,更快更强的做法请看 大佬的题解(这个可以点)
可能会有长度相同的边而又要满足严格递增是这道题中的问题所在
蒟蒻的思路很简单,用vector存以每一个节点结尾的路径信息 (数组会MLE)
信息1:这个点是由哪条边过来的
信息2:由这条边过来的路径最大长度是多少
具体做法
先对每条边按长度排序,保证长度不下降
第一条边单独做,直接将信息存入vector
sort (a + 1, a + m + 1, cmp); //将边按从大到小排序
v[a[1].v].push_back((q){1, 1}); //第一条边单独处理
然后枚举每一条边,枚举每个u的方案,更新方案和答案
代码
(代码不长,但是挺慢,空间也大,大佬的强多了)
#include <bits/stdc++.h>
using namespace std;
const int maxn = 300008;
int n, m, ans = 1;
struct e{
int u, v, w;
}a[maxn]; //e记录每一条边信息
struct q{
int num, k; //num表示路径长度(边数),k表示由第k条边走来
}; //q存储到每个节点方案的信息
bool cmp (e a, e b) {
return a.w < b.w;
}
vector <q> v[maxn];
int main(){
scanf ("%d %d", &n, &m);
for (int i = 1; i <= m; i++) scanf ("%d %d %d", &a[i].u, &a[i].v, &a[i].w);
sort (a + 1, a + m + 1, cmp); //将边按从大到小排序
v[a[1].v].push_back((q){1, 1}); //第一条边单独处理
for (int i = 2; i <= m; i++){
v[a[i].v].push_back((q){1, i}); //先存入vector中
int t = a[i].u, len = v[a[i].v].size(); //记录当前的长度(下标)
for (int j = 0; j < v[t].size(); j++){ //枚举u的方案
if (a[v[t][j].k].w < a[i].w) {
v[a[i].v][len-1].num = max (v[a[i].v][len-1].num, v[t][j].num + 1);
ans = max (ans, v[a[i].v][len-1].num);
//如果满足严格递增更新方案和答案
}
}
}
printf ("%d", ans);
return 0;
}
SCOJ4427 / TOPOI 4404: Miss Zhao's Graph 解题报告的更多相关文章
- 【LeetCode】323. Number of Connected Components in an Undirected Graph 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 并查集 日期 题目地址:https://leetcod ...
- 【LeetCode】133. Clone Graph 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS BFS 日期 题目地址:https://le ...
- LeetCode: Clone Graph 解题报告
Clone GraphClone an undirected graph. Each node in the graph contains a label and a list of its neig ...
- codeforces 165D.Beard Graph 解题报告
题意: 给一棵树,树的每条边有一种颜色,黑色或白色,一开始所有边均为黑色,有两个操作: 操作1:将第i条边变成白色或将第i条边变成黑色. 操作2 :询问u,v两点之间仅经过黑色变的最短距离. 树链剖分 ...
- SCOJ 4427: Miss Zhao's Graph dp
4427: Miss Zhao's Graph 题目连接: http://acm.scu.edu.cn/soj/problem.action?id=4427 Description Mr Jiang ...
- 【LeetCode】785. Is Graph Bipartite? 解题报告(Python)
[LeetCode]785. Is Graph Bipartite? 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu. ...
- LeetCode 解题报告索引
最近在准备找工作的算法题,刷刷LeetCode,以下是我的解题报告索引,每一题几乎都有详细的说明,供各位码农参考.根据我自己做的进度持续更新中...... ...
- CF Round #600 (Div 2) 解题报告(A~E)
CF Round #600 (Div 2) 解题报告(A~E) A:Single Push 采用差分的思想,让\(b-a=c\),然后观察\(c\)序列是不是一个满足要求的序列 #include< ...
- POJ 2054 Color a Tree解题报告
题干 Bob is very interested in the data structure of a tree. A tree is a directed graph in which a spe ...
随机推荐
- 关于ATML信号定义的理解-1
1.XML中的类型标签: <xs:complexType>复合类型和<xs:simpleTyle>简单类型是数据结构类型,包含了各种类型的属性.可以被子类型继承,继承方式为&l ...
- es6的foreach循环遍历
forEach forEach是Array新方法中最基本的一个,就是遍历,循环.例如下面这个例子: 结果: 这段代码相当于: for (var k = 0, length = array.length ...
- Simple Rtmp Server的安装与简单使用
Simple Rtmp Server是一个国人编写的开源的RTMP/HLS流媒体服务器. 功能与nginx-rtmp-module类似, 可以实现rtmp/hls的分发. 有关nginx-rtmp-m ...
- Linux上用nginx搭建RTMP服务器
参考文章:https://obsproject.com/forum/resources/how-to-set-up-your-own-private-rtmp-server-using-nginx.5 ...
- innerdb disable error
innodb=OFF ignore-builtin-innodb skip-innodbdefault-storage-engine=myisam default-tmp-storage-engine ...
- Anthem.NET 的回调流程图
下面用一个最简单的 anthem:Button 回调作为例子,理清回调过程中执行函数的次序.代码如下: <%@ Page Language="C#" AutoEventWir ...
- bzoj 2850 巧克力王国——KDtree
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2850 改一下估价即可.判断子树能否整个取或者是否整个不能取,时间好像就能行了? 因为有负数, ...
- Centos6.5安装上传下载工具
执行下面命令即可. sudo yum install lrzsz rz 是上传命令 sz filename是下载命令 如果rz上传文件时提示 was skipped,则用sudo rz命令来进行上传.
- HeartBleed bug
前两年的一个严重漏洞,影响很大.出现在openssl 1.0.1和1.0.2 beta(包含1.0.1f和1.0.2beta1).利用了TLS的heartbeat. 简单的说,该漏洞被归为缓冲过度读取 ...
- 怎么查看mysql的安装目录,环境:windows+mysql+navicat
怎么查看mysql的安装目录 如果忘记了MySQL的安装目录,怎么快速找到呢?方法或许很多,作者觉得这种最方便了 环境:windows+mysql+navicat 方法:进入mysql命令行输入:sh ...