問題 B 花園

2022-04-08 14:55:27 字數 1083 閱讀 1608

題目描述

小n經常去小t家的花園裡散步,小t家的花園有n個長的⼀樣的亭⼦和m條道路連線著亭⼦,但是小t的花園太過於亂了,小n作為⼀個路痴經常進去了之後找不到出來的路,⼀直在環裡面繞圈。於是小n要讓小t把其中的某些路種上向日葵,使得剩下的路不會出現環。

因為向日葵不⽅便種,⽽第i條路長li,需要li個向日葵去種,於是小t想知道他最少要種多少向日葵才能滿⾜小n的要求呢?

輸入第⼀⾏兩個整數n、m,表示花園的亭⼦數目和道路數目;

接下來m⾏,每⾏3個整數a,b,c,表示有⼀條連線著a和b的長度為c的道路。

輸出輸出⼀⾏,⼀個整數,表示小t最少需要種的向日葵數目。

樣例輸入

複製樣例資料

5 51 2 5

1 4 4

3 4 3

2 3 2

3 5 1

樣例輸出

2就是給定乙個有向圖, 有環圖, 然後讓你去掉一些邊之後,使無環,並且去掉的邊和最小,,,正向做不出來, 反向就是選一些邊生成乙個樹(最小生成樹肯定無環) , 所以剩下的就是最優的,但是我們一般求的最小生成樹就是權值最小, 那麼剩下的肯定最大了,與題意不符合, 所以我們將每條邊取成相反數, 此時求最小生成樹, 然後剩下的邊才是最小的, 用此時 的最小生成樹權值加上之前的全部權值和,就是答案,sum + res (sum , 原來圖的所有權值之和, res, 相反數構成的最小生成樹, 最小權值, 負的最小,相加就是最小了)

#include 

#include

#include

using namespace std;

const

int n =

2e5+10;

typedef long

long ll ;

struct node

}e[n]

;int f[n]

;int

find

(int x)

intmain()

}printf

("%lld\n"

, res + sum)

;return0;

}

教主的花園

lhx教主最近總困擾於前來膜拜他的人太多了,所以他給他的花園加上了一道屏障。可以把教主的花園附近區域抽像成乙個正方形網格組成的網路,每個網格都對應了乙個座標 均為整數,有可能為負 若兩個網格 x1,y1 x2,y2 有 x1 x2 y1 y2 1,則說這兩個網格是相鄰的,否則不是相鄰的。教主在y 0...

Story 狗尾草花園

不知道為什麼,很多年過去,我卻依然記得這個故事。很小的時候,大概 四 五歲吧,在河灘上和幾個姐姐,一起玩過家家。他們大概十三,四歲吧,反正比我大好多。分成兩組,我在我們一組當然是小卒子。搬搬泥,撿撿石塊什麼的。大家用小石頭在一塊平地上圍成乙個大圈,作為 家 然後找一些漂亮的石頭和細膩的沙 在 家 裡...

教主的花園

教主有著乙個環形的花園,他想在花園周圍均勻地種上n棵樹,但是教主花園的土壤很特別,每個位置適合種的樹都不一樣,一些樹可能會因為不適合這個位置的土壤而損失觀賞價值。教主最喜歡33種樹,這3種樹的高度分別為10,20,3010,20,30。教主希望這一圈樹種得有層次感,所以任何乙個位置的樹要比它相鄰的兩...