题解 [51nod1274] 最长递增路径
解析
这题一眼DP啊.
然而想了半天毫无思路.
后来看题解后发现可以按边权的大小顺序DP.
将边权从小到大排序,对于权值相同的边分为一组.
设\(f[i][0]\)表示经过当前权值的边后到达\(i\)的最长路,
\(f[i][1]\)表示经过之前的权值的边后到达\(i\)的最长路.
那么对于一条边\(x,y\),
\(f[x][0]=max(f[x][0],f[y][1]+1\)),
\(f[y][0]=max(f[y][0],f[x][1]+1\)).
在处理完每组边后用\(f[i][0]\)去更新\(f[i][1]\)就行了.
code:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define filein(a) freopen(a".cpp","r",stdin)
#define fileout(a) freopen(a".cpp","w",stdout);
using namespace std;
inline int read(){
	int sum=0,f=1;char c=getchar();
	while((c<'0'||c>'9')&&c!=EOF){if(c=='-') f=-1;c=getchar();}
	while(c>='0'&&c<='9'&&c!=EOF){sum=sum*10+c-'0';c=getchar();}
	return sum*f;
}
const int N=50001;
struct edge{int x,y,w;}e[N];
int n,m;
int f[N][2];
inline bool cmp(edge a,edge b){return a.w<b.w;}
int main(){
	n=read();m=read();
	for(int i=1;i<=m;i++)
		e[i].x=read(),e[i].y=read(),e[i].w=read();
	sort(e+1,e+m+1,cmp);
	for(int l=1,r=1;l<=m;l=r=r+1){
		while(e[r+1].w==e[r].w) r++;
		for(int i=l;i<=r;i++){
			int x=e[i].x,y=e[i].y;
			f[x][0]=max(f[x][0],f[y][1]+1);
			f[y][0]=max(f[y][0],f[x][1]+1);
		}
		for(int i=l;i<=r;i++){
			f[e[i].x][1]=f[e[i].x][0];
			f[e[i].y][1]=f[e[i].y][0];
		}
	}
	int ans=0;
	for(int i=0;i<n;i++) ans=max(ans,f[i][1]);
	printf("%d\n",ans);
	return 0;
}
题解 [51nod1274] 最长递增路径的更多相关文章
- 【题解】最长递增路径 [51nod1274]
		[题解]最长递增路径 [51nod1274] 传送门:最长递增路径 \([51nod1274]\) [题目描述] 一个可能有自环有重边的无向图,每条边都有边权.输入两个整数 \(n,m\) 表示一共 ... 
- 51nod1274 最长递增路径
		将边排序后dp一下就可以了. #include<cstdio> #include<cstring> #include<cctype> #include<alg ... 
- [LeetCode] Longest Increasing Path in a Matrix 矩阵中的最长递增路径
		Given an integer matrix, find the length of the longest increasing path. From each cell, you can eit ... 
- [Swift]LeetCode329. 矩阵中的最长递增路径 | Longest Increasing Path in a Matrix
		Given an integer matrix, find the length of the longest increasing path. From each cell, you can eit ... 
- Leetcode 329.矩阵中的最长递增路径
		矩阵中的最长递增路径 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: n ... 
- Leetcode之深度优先搜索(DFS)专题-329. 矩阵中的最长递增路径(Longest Increasing Path in a Matrix)
		Leetcode之深度优先搜索(DFS)专题-329. 矩阵中的最长递增路径(Longest Increasing Path in a Matrix) 深度优先搜索的解题详细介绍,点击 给定一个整数矩 ... 
- LeetCode. 矩阵中的最长递增路径
		题目要求: 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例: 输入: nums = [ ... 
- Java实现 LeetCode 329 矩阵中的最长递增路径
		329. 矩阵中的最长递增路径 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: ... 
- 51nod最长递增路径:(还不错的图)
		一个无向图,可能有自环,有重边,每条边有一个边权.你可以从任何点出发,任何点结束,可以经过同一个点任意次.但是不能经过同一条边2次,并且你走过的路必须满足所有边的权值严格单调递增,求最长能经过多少条边 ... 
随机推荐
- Exchanging Gifts--2019CCPC哈尔滨 E题
			题意:http://codeforces.com/gym/102394/problem/E 1操作是给你一串数,2操作是连结两个串(所以可能很长),问你最后一个串的值(知道最多的个数就很好算,关键计算 ... 
- linux的定时器(timer_create,timer_gettime,timer_delete,SIGEV_SIGNAL)
			ref : http://blog.chinaunix.net/uid-28458801-id-5035347.html 系统中的一个模块需要频繁的获取系统时间,使用linux中内置的函数开销过大 ... 
- 怎样在浏览器端增加一条Cookie
			可以使用 document.cookie, 这个属性可读可写, 读时是读取所有没有设置HttpOnly的cookie作为一个字符串返回, 写时是将一个cookie写入到document.cookie中 ... 
- PHP如何通过URL访问,获得新的URL 两种方法
			1.1 $url = 'http://passport.drcloud.cn/api/logon.asp?id=1&ru=http://203.158.158.122/store/thirdL ... 
- Python算法题(三)——经典函数题
			题目一(统计字符串中指定类型字符的个数): 假设所有字符分为三类:字母,数字及其他字符. ... 
- CNN 笔记
			1. 卷积后的图像的大小为 (w+2p-f)*3 / s W为图像的宽,p为padding的大小, f为卷积核大小, 3 为图像的通道数, s为步长 2. 卷积层和池化层的区别? 卷积层是 ... 
- NodeJS express框架的使用
			首先,可以通过npm或者淘宝镜像cnpm全局安装epress框架,这里不具体说了 npm install -g expressnpm install -g express-generator 新建一个 ... 
- 关于一些JS的运算符
			首先呢,什么是JavaScript:JavaScript是一种脚本语言,也是一种解释型语言,更是一种由数据值决定变量类型的弱类型语言 JavaScript主要由三部分组成 ECMAScript 这个 ... 
- react route使用HashRouter和BrowserRouter的区别-Content Security Policy img-src 404(Not found)
			踩坑经历 昨天看了篇关于react-route的文章,说BrowserRouter比HashRouter好一些,react也是推荐使用BrowserRouter,毕竟自己在前端方面来说,就是个小白,别 ... 
- js实现复制 、剪切功能-clipboard.min.js 示例
			html: <div id="txt">我是要复制的内容</button> <button id="copyBtn">点击复 ... 
