洛谷 P1194 買禮物

2022-06-24 17:21:10 字數 985 閱讀 8579

又到了一年一度的明明生日了,明明想要買b樣東西,巧的是,這b樣東西**都是a元。

但是,商店老闆說最近有**活動,也就是:

如果你買了第i樣東西,再買第j樣,那麼就可以只花\(k_\) 元,更巧的是,\(k_\)竟然等於\(k_\)。

現在明明想知道,他最少要花多少錢。

可以這樣想,購買這些東西會構成乙個樹狀關係,除了根之外其他點都按照***格購買(當然***格可能比原價還貴,這裡只需要取min即可),那怎樣得到除了根之外其他***格的最優解呢?只需要跑一遍最小生成樹即可,這樣必然會得到一棵樹,並且是最優解。

#include #include #include #include const int maxn = 1005;

struct edge

edge(int u, int v, int w):u(u), v(v), w(w){}

bool operator < (const edge &x) const

} e[maxn * maxn];

int father[maxn];

int nv, ne, k;

int find(int x)

void union(int u, int v)

}int kruskal()

int t = 0, ans = 0;

for (int i = 0; i < ne; i++) }}

return t == nv - k ? ans : -1;

}void solve()

std::sort(e, e + ne);

int ans = kruskal();

if (ans == -1) else

}int main()

洛谷P1194 買禮物

又到了一年一度的明明生日了,明明想要買b樣東西,巧的是,這b樣東西 都是a元。但是,商店老闆說最近有 活動,也就是 如果你買了第i樣東西,再買第j樣,那麼就可以只花k i,j 元,更巧的是,k i,j 竟然等於k j,i 現在明明想知道,他最少要花多少錢。輸入格式 第一行兩個整數,a,b。接下來b行...

洛谷 P1194 買禮物

又到了一年一度的明明生日了,明明想要買bb樣東西,巧的是,這bb樣東西 都是aa元。但是,商店老闆說最近有 活動,也就是 如果你買了第ii樣東西,再買第jj樣,那麼就可以只花k ki,j 元,更巧的是,k ki,j 竟然等於k kj,i 現在明明想知道,他最少要花多少錢。輸入格式 第一行兩個整數,a...

洛谷 P1194 買禮物

這道題其實就是轉化乙個模型就可以了。買了乙個另外乙個又優惠,其實就相當於在優惠的時候連一條邊,因為不可能多買,所以就是建一棵最小生成樹。最後因為肯定買了一件物品,要加上最初的單價。include using namespace std struct node node e 510000 int pr...