洛谷P3387 模板 縮點

2021-09-26 02:10:54 字數 999 閱讀 6694

kma縮點之後很明顯是個dag,跑一遍toposort順便dp

方程\(ans[v] = max(ans[u] + w[v], ans[v])\),ans是到這個連通塊的最大點權和,w是這個連通塊的點權

注意縮點之後兩個連通塊之間可能會有很多邊,從連通塊內不同的點發出,正反分別只能連一次,否則toposort會涼

#include #define n (100000 + 10)

using namespace std;

inline int read()

while (isdigit(c))

return cnt * f;

}int n, m, x, y, to[n], first[n], nxt[n], tot, sta[n], insta[n], w[n], v[n], id[n];

int nxt_[n], first_[n], to_[n], tot_, in[n], low[n], dfn[n], sign, top, cnt;

int ans[n], gmax, fa[n];

int get_father(int x)

inline void add(int x, int y)

inline void add_(int x, int y)

void tarjan(int u) while(u != sta[top--]);

}}inline void toposort()

}}int main()

register int *t = fa + 1; for (;t <= fa + cnt + 1;)

for (register int i = 1; i <= n; ++i)

for (register int j = first[i]; j; j = nxt[j])

}toposort();

printf("%d", gmax);

return 0;

}

模板 縮點 洛谷p3387

縮點 dp 給定乙個n個點m條邊有向圖,每個點有乙個權值,求一條路徑,使路徑經過的點權值之和最大。你只需要求出這個權值和。允許多次經過一條邊或者乙個點,但是,重複經過的點,權值只計算一次。輸入格式 第一行,n,m 第二行,n個整數,依次代表點權 第三至m 2行,每行兩個整數u,v,表示u v有一條有...

洛谷P3387 (模板)縮點

題目鏈結 縮點 dp 給定乙個 n 個點 m 條邊有向圖,每個點有乙個權值,求一條路徑,使路徑經過的點權值之和最大。你只需要求出這個權值和。允許多次經過一條邊或者乙個點,但是,重複經過的點,權值只計算一次。第一行,n m 第二行,n 個整數,依次代表點權 第三至 m 2 行,每行兩個整數 u v 表...

縮點 洛谷P3387

給定乙個n個點m條邊有向圖,每個點有乙個權值,求一條路徑,使路徑經過的點權值之和最大。你只需要求出這個權值和。允許多次經過一條邊或者乙個點,但是,重複經過的點,權值只計算一次。第一行,n,m。第二行,n個整數,依次代表點權。第三至m 2行,每行兩個整數u,v,表示u v有一條有向邊。共一行,最大的點...