題目說只能走到東邊的城市,又保證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為終點,使得線路上除了第乙個城市,每個城市都在路線前乙個城市東面,並且滿足這個前提下還希望遊覽的城市盡量多。現在,你...