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 ...
随机推荐
- BEC listen and translation exercise 39
What about jigsaw puzzle design for visually handicapped?给视觉障碍人士设计拼图怎么样? Length is 50cm, and then th ...
- 【leetcode刷题笔记】Sum Root to Leaf Numbers
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...
- ACdream1430SETI(后缀自动机)
问题: Amateur astronomers Tom and Bob try to find radio broadcasts of extraterrestrial civilizations i ...
- Aravis 库编译方法
Aravis 库编译方法 March 21, 2015 9:40 PM 首先下载 aravis 库的源代码:aravis 库下载地址 这里我们使用的是 aravis_0_2_0,比较老的一个版本. 首 ...
- Oracle 12C 新特性之级联truncate
12c之前的版本中,在子表引用一个主表以及子表存在记录的情况下,是不提供截断此主表操作的.而在 12c 中的带有 CASCADE 操作的TRUNCATE TABLE 可以截断主表中的记录,并自动对子表 ...
- 多级联动下拉菜单--cxSelect
jquery cxSelect插件 github地址:https://github.com/ciaoca/cxSelect demo地址:http://code.ciaoca.com/jquery/c ...
- 洛谷 P4547 & bzoj 5006 随机二分图 —— 状压DP+期望
题目:https://www.luogu.org/problemnew/show/P4547 https://www.lydsy.com/JudgeOnline/problem.php?id=5006 ...
- HDOJ1181(简单DFS)(练习使用STL)
#include<iostream> #include<cstdio> #include<string> #include<map> #include& ...
- MongoDB之二基础入门(window/linux安装启动)
mongodb中有三元素:数据库,集合,文档,其中“集合”就是对应关系数据库中的“表”,“文档”对应“行”. 一window安装与启动 一. 下载 上MongoDB官网 ,下载页面:https://w ...
- paramiko使用1