正题
题目大意
求一条最大的权值严格上升的路径。
解题思路
将边权排序,然后从fxf_xfx转移到fy+1f_y+1fy+1即可,要注意的是因为严格上升,所以此次转移用的fff不能是相同权值转移时转移的。
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=5e5+10;
struct node{int x,y,w;
}a[N];
queue<pair<int,int> > q;
int n,m,f[N],ans;
bool cmp(node x,node y)
{return x.w<y.w;}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].w);a[i].x++;a[i].y++;}sort(a+1,a+1+m,cmp);for(int i=1;i<=m;i++){if(a[i].w!=a[i-1].w){while(!q.empty()){int x=q.front().first,w=q.front().second;f[x]=max(f[x],w);q.pop();}}q.push(make_pair(a[i].y,f[a[i].x]+1));q.push(make_pair(a[i].x,f[a[i].y]+1));}while(!q.empty()){int x=q.front().first,w=q.front().second;f[x]=max(f[x],w);q.pop();}for(int i=1;i<=n;i++)ans=max(ans,f[i]);printf("%d",ans);
}