思路:dp[i]表示到點i的最大收益,初始化為-inf,然後從入度為0點開始bfs就可以了,一開始一直tle,然後優化了好久才4000ms險過。
之後有寫了個dfs記憶化搜尋,果然快多了。
bfs ac code:
1 #include2 #include3 #include4 #include5 #include6view codeusing
namespace
std;
7#define maxn 100100
8#define maxm 2002000
9#define inf 1<<30
1011
struct
edgeedge[maxm];
1415
intn,m,ne;
16int
head[maxn];
1718
void insert(int u,int
v)19
2425
intin_degree[maxn],out_degree[maxn];
26int
dp[maxn],value[maxn];
27bool
mark[maxn];
2829
void
bfs()
3039
while(!que.empty())50}
51}52}
53}5455
56int
main()
5771
bfs();
72 ans=-inf;
73for(int i=1;i<=n;i++)
76 printf("
%d\n
",ans);77}
78return0;
79 }
dfs 記憶化 ac code:
1 #include2 #include3 #include4 #include5 #include6view codeusing
namespace
std;
7#define maxn 100100
8#define maxm 2002000
9#define inf 1<<30
1011
struct
edgeedge[maxm];
1415
intn,m,ne;
16int
head[maxn];
1718
void insert(int u,int
v)19
2425
intin_degree[maxn],out_degree[maxn];
26int
dp[maxn],value[maxn];
2728
int dfs(int
u)29
37if(ans!=-inf)
40return
dp[u];41}
4243
intmain()
4458 ans=-inf;
59 fill(dp,dp+1+n,-inf);
60for(int i=1;i<=n;i++)64}
65 printf("
%d\n
",ans);66}
67return0;
68 }
POJ 3249 拓撲排序 動態規劃
該題是讓求在乙個有向無環圖中,從乙個入度為 0 的節點出發,到乙個出度為 0 的節點的最大的權值問題。我們可以使用廣搜,但是會超時,上網查了一下解題報告,可以使用拓撲排序 動態規劃來解決此問題 dp 1 max dp 2 cost 2 dp 4 dp 3 cost 3 dp 4 dp 4 cost ...
POJ 3249 記憶化搜尋,,,,DAG最長路
題目大意 給出n個點,m條邊,每個點都提供了相對的點權值,然後給出相連著的邊,問從起點走到終點最大利潤值。起點是入度為0的點,終點是出度為0的點。思路1 spfa求最長路,正向建邊tle,反向建邊4400msac。2 記憶化搜尋,每次都儲存當前點到終點獲得的最大利潤。ac 搜尋 1844ms inc...
poj3984(BFS)迷宮路徑
迷宮問題 time limit 1000ms memory limit 65536k total submissions 6112 accepted 3539 description 定義乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,...