在dag中,拓撲排序可以確定dp的順序
把圖的資訊轉化到乙個拓撲序上
注意轉移的時候要用邊轉移
這道題的dp是用刷表法
#include#define rep(i, a, b) for(register int i = (a); i < (b); i++)#define _for(i, a, b) for(register int i = (a); i <= (b); i++)
using
namespace
std;
const
int maxn = 1e5 + 10
;struct edge;
edge e[maxn
<< 1
];int
head[maxn], d[maxn];
inttopo[maxn], dp[maxn];
intn, m, cnt, tot;
void addedge(int
from, int
to);
head[
from] = tot++;
}void read(int&x)
while(isdigit(ch))
x *=f;
}void
toposort()
}}int
main()
toposort();
_for(i,
1, n) dp[i] = 1
; _for(i,
1, n)
}_for(i,
1, n) printf("
%d\n
", dp[i]);
return0;
}
還可以用記憶化搜尋
#include#define rep(i, a, b) for(register int i = (a); i < (b); i++)#define _for(i, a, b) for(register int i = (a); i <= (b); i++)
using
namespace
std;
const
int maxn = 1e5 + 10
;struct edge;
edge e[maxn
<< 1
];int
head[maxn], dp[maxn];
intn, m, cnt, tot;
void addedge(int
from, int
to);
head[
from] = tot++;
}void read(int&x)
while(isdigit(ch))
x *=f;
}int dfs(int
u)
return
dp[u];
}int
main()
memset(dp, -1, sizeof
(dp));
_for(i,
1, n) printf("
%d\n
", dfs(i));
return0;
}
洛谷P1137 旅行計畫(拓撲排序 dp)
題目描述 小明要去乙個國家旅遊。這個國家有n個城市,編號為1 n,並且有m條道路連線著,小明準備從其中乙個城市出發,並只往東走到城市i停止。所以他就需要選擇最先到達的城市,並制定一條路線以城市i為終點,使得線路上除了第乙個城市,每個城市都在路線前乙個城市東面,並且滿足這個前提下還希望遊覽的城市盡量多...
P1137 旅行計畫 拓撲排序
p1137 旅行計畫 小明要去乙個國家旅遊。這個國家有n個城市,編號為1 n,並且有m條道路連線著,小明準備從其中乙個城市出發,並只往東走到城市i停止。所以他就需要選擇最先到達的城市,並制定一條路線以城市i為終點,使得線路上除了第乙個城市,每個城市都在路線前乙個城市東面,並且滿足這個前提下還希望遊覽...
P1137 旅行計畫 拓撲排序
小明要去乙個國家旅遊。這個國家有n個城市,編號為1 n,並且有m條道路連線著,小明準備從其中乙個城市出發,並只往東走到城市i停止。所以他就需要選擇最先到達的城市,並制定一條路線以城市i為終點,使得線路上除了第乙個城市,每個城市都在路線前乙個城市東面,並且滿足這個前提下還希望遊覽的城市盡量多。現在,你...