AHOI2014 JSOI2014 支線劇情

2022-05-02 02:15:09 字數 1233 閱讀 7826

傳送門

上下界網路流。

以 \(1\) 號節點為源點 \(s\) ,新建乙個匯點 \(t\),如果 \(u\) 能到 \(v\),那麼連邊 \(u \to v\),下界為 \(1\),上界為 \(+\infty\),費用為對應的所需時間,表示這段劇情至少看一次,且看一次代價為對應的所需時間。

又因為我們可以在任何乙個節點重開一次,所以我們的每個節點 \(u\) 都連邊 \(u \to t\) ,下界為 \(0\),上界為 \(+\infty\),費用也是 \(0\)。

然後我們就對建出來的網路跑乙個有源匯有上下界可行流即可。

注意最後算答案的時候還要把每條邊至少走一次的代價算進來。

參考**:

#include #include #include #define rg register

#define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout)

using namespace std;

template < class t > inline void read(t& s)

const int _ = 310, __ = 1e5 + 10, inf = 2147483647;

int tot = 1, head[_]; struct edge edge[__ << 1];

inline void add_edge(int u, int v, int d, int cs) , head[u] = tot; }

inline void link(int u, int v, int d, int cs)

int n, s, t, s, t, d[_], pre[_], dis[_], exi[_];

inline void link(int u, int v, int l, int r, int cs)

inline int spfa() }}

return pre[t] != 0;

}int main()

for (rg int i = 1; i <= n; ++i) link(i, t, 0, inf, 0);

link(t, s, inf, 0);

for (rg int i = s; i <= t; ++i)

while (spfa())

printf("%d\n", ans);

return 0;

}

AHOI2014 JSOI2014 騎士遊戲

題目背景 長期的宅男生活中,jyy又挖掘出了一款rpg遊戲。在這個遊戲中jyy會 扮演乙個英勇的騎士,用他手中的長劍去殺死入侵村莊的怪獸。題目描述 在這個遊戲中,jyy一共有兩種攻擊方式,一種是普通攻擊,一種是法術攻擊。兩種攻擊方式都會消耗jyy一些體力。採用普通攻擊進攻怪獸並不能把怪獸徹底殺死,怪...

AHOI2014 JSOI2014 騎士遊戲

題目 思博貪心題寫了乙個半小時沒救了,我也沒看出這是乙個 spfa 來啊 設 dp i 表示徹底乾掉第 i 只怪物的最小花費,乙個非常顯然的事情,就是對於 k i 值最小的怪物滿足 dp i k i 非常好理解,反正到最後都要乾掉這個怪物,何必再把它乾成別的怪物 於是我們按照 k i 的值先排序一下...

AHOI2014 JSOI2014 騎士遊戲

傳送門 考慮 text 設 dp i 表示滅種 霧 乙隻編號為 i 的怪物的代價。那麼轉移顯然是 dp i min k i,s i sum dp 但是我們會發現這個東西是有後效性的。所以我們會想要用建圖然後跑乙個最短路什麼的來搞。於是我們觀察到上面那個 text 式子中,dp i 如果用後面那一項來...