DAGdp 洛谷P1137旅行計畫

2021-10-24 07:26:44 字數 1516 閱讀 4260

題目說只能走到東邊的城市,又保證x

xx再y

yy的西面,雖然說是雙向道路,但是就可以直接建(x,

y)

(x,y)

(x,y

)的邊。

可以得到dp[

v]

=max⁡(

dp[v

],dp

[u]+

1)

dp[v]=\max(dp[v],dp[u]+1)

dp[v]=

max(dp

[v],

dp[u

]+1)

,那麼怎麼解決後效性呢?就是用拓撲排序,因為拓撲排序出來的點就可以保證乙個點不會再有入度,這樣就不會受到別的點的影響,這樣就沒有了後效性。

#include

#define pii pair

#define ll long long

#define cl(x,y) memset(x,y,sizeof(x))

#define ct cerr<<"time elapsed:"<<1.0*clock()/clocks_per_sec<<"s.\n";

#define mp make_pair

#define pb push_back

#define fi first

#define se second

#define all(x) x.begin(),x.end()

#define lson x<<1,l,mid

#define rson x<<1|1,mid+1,r

#define inf 1e18

const

int n=

1e6+10;

const

int mod=

1e9+7;

const

int inf=

0x3f3f3f3f

;const

double eps=

1e-8

;const

double pi=

acos(-

1);using

namespace std;

struct edge

e[n]

;int head[n]

=,len=

0,in[n]

=,dp[n]=;

void

add(

int u,

int v)

; head[u]

=len;

}int

main()

queue<

int> q;

for(i=

1;i<=n;i++)if

(!in[i]

) q.

push

(i);

while

(!q.

empty()

)}for(i=

1;i<=n;i++

) cout<

}

洛谷 P1137 旅行計畫

題目描述 小明要去乙個國家旅遊。這個國家有n個城市,編號為1 n,並且有m條道路連線著,小明準備從其中乙個城市出發,並只往東走到城市i停止。所以他就需要選擇最先到達的城市,並制定一條路線以城市i為終點,使得線路上除了第乙個城市,每個城市都在路線前乙個城市東面,並且滿足這個前提下還希望遊覽的城市盡量多...

洛谷P1137 旅行計畫

題目描述 小明要去乙個國家旅遊。這個國家有n個城市,編號為1 n,並且有m條道路連線著,小明準備從其中乙個城市出發,並只往東走到城市i停止。所以他就需要選擇最先到達的城市,並制定一條路線以城市i為終點,使得線路上除了第乙個城市,每個城市都在路線前乙個城市東面,並且滿足這個前提下還希望遊覽的城市盡量多...

洛谷 P1137 旅行計畫

小明要去乙個國家旅遊。這個國家有n個城市,編號為1 n,並且有m條道路連線著,小明準備從其中乙個城市出發,並只往東走到城市i停止。所以他就需要選擇最先到達的城市,並制定一條路線以城市i為終點,使得線路上除了第乙個城市,每個城市都在路線前乙個城市東面,並且滿足這個前提下還希望遊覽的城市盡量多。現在,你...