51nod 1274 最長遞增路徑(DP)

2022-05-12 16:37:21 字數 1147 閱讀 5244

一開始自己想了一種跑的巨慢。。寫了題解的做法又跑的巨快。。一臉懵逼

顯然要求邊權遞增就不可能經過重複的邊了,那麼設f[i]為第i條邊出發能走多遠就好了,這是我一開始的寫法,可能dfs冗餘狀態較多,跑的極慢

#include#include

#include

#include

#include

#include

#include

#include

#define ll long long

using

namespace

std;

const

int maxn=500010,inf=1e9;

struct poie[maxn];

intn,m,x,y,z,tot,ans;

intlast[maxn],dp[maxn];

void read(int &k)

void add(int x,int y,int z)

int dfs(int x,int

fa)int

main()

view code

題解的做法是按照邊權排序,然後就可以用點來轉移了...

(然後就踩在yyl頭上了

#include#include

#include

#include

#include

#include

#include

#include

#define ll long long

using

namespace

std;

const

int maxn=500010,inf=1e9;

struct poie[maxn];

intn,m,x,y,z,ans,last;

intg[maxn],f[maxn];

void read(int &k)

bool cmp(poi a,poi b)

intmain()

for(int i=0;imax(ans,f[i]);

printf(

"%d\n

",ans);

return0;

}

view code

51nod 1274 最長遞增路徑

1274 最長遞增路徑 codility 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 乙個無向圖,可能有自環,有重邊,每條邊有乙個邊權。你可以從任何點出發,任何點結束,可以經過同乙個點任意次。但是不能經過同一條邊2次,並且你走過的路必須滿足所有邊的權值嚴格單調...

51nod1274 最長遞增路徑

將邊排序後dp一下就可以了。include include include includeusing namespace std define rep i,s,t for int i s i t i define dwn i,s,t for int i s i t i define clr x,c ...

51nod 1274 最長遞增路徑(dp)

題目鏈結 定義dp i 走到頂點i的最長路徑。為了動態規劃的無後效性,得先把邊按權值排序。為了不讓頂點之間的dp值重複計算,得把上一次的dp值儲存下來。由於需要嚴格遞增,所以權值相同的邊用到的dp值是一樣的,所以可以一次把所有權值相同的邊一起加入圖里,然後更新答案。d p u m ax d p u ...