最小生成樹 Jzoj P3237 間諜派遣

2022-07-24 05:33:17 字數 1511 閱讀 8240

description

你是m,乙個僱傭n個標號為從1到n的間諜的情報機關的總管。每個間諜被派往不同的國家並在那獲取重要情報。

如下是你的任務:

1.在部分間諜間組織會面。每次會面在兩個間諜間進行,兩個間諜交換他們自己獲取的或從之前會面中得到的資訊。因為在不同國家的兩個間諜間組織機密會面很困難,所以每次秘密會面都有乙個費用。

2.當所有會面結束後,選擇一部分間諜參加拯救世界的任務。乙個間諜k參加此項任務需要花費mk。很重要的一點是,任務要成功,必須滿足參加任務的間諜獲取的情報聚集到一起包含了其他剩餘間諜所有的資訊。

請找出完成任務的最小花費,即組織會面和派遣間諜的費用之和。

input

輸入的第一行包含正整數n,表示間諜數目(2≤n≤1000)。

接下來的n行包含n個不超過10^6的非負整數。在k行m列的數字表示間諜k和m間會面的花費,同樣的,與m行k列的數字相等,k=m時數字為0。

接下來的一行包含n個正整數mk(1≤mk≤10^6),分別為派遣間諜1,2,…,n參加任務的花費。

output

只有一行,為所需的最小總費用。

sample input

輸入1:

30 6 9

6 0 4

9 4 0

7 7 7

輸入2:

30 17 20

17 0 10

20 10 0

15 9 12

輸入3:

50 3 12 15 11

3 0 14 3 20

12 14 0 11 7

15 3 11 0 15

11 20 7 15 0

5 10 10 10 10

sample output

輸出1:

17輸出2:

34輸出3:

28

data constraint

40%的資料滿足n<=30且存在最多不超過4個間諜參加任務的最優方案;

50%的資料滿足派遣每個間諜參加任務的費用是一樣的。

hint

樣例1:將會在1和2,接著2和3間諜間舉行會面,然後送間諜2參與任務。

樣例2:將會在2和3間諜間舉行會面,然後送間諜1和2參與任務。

樣例3:將會在2和4,接著1和2,接著3和5間諜間舉行會面,然後送間諜1和3(或1和5)參與任務。

1 #include 2 #include 3

#define ll long long

4using

namespace

std;

5const

int n=1010;6

intn,a[n][n],dis[n];

7bool

vis[n];

8ll ans;

9int

main()

1021 printf("

%lld

",ans);

22 }

Jzoj P3237 間諜派遣

n個人,每個人都有乙份情報 人之間都可以交流,交流有對應的費用,交流完後各自享有對方的情報 a與b交流,a與c交流,b與c也可以互相享有 派遣乙個人去執行任務有對應的費用 要求 派遣的人需要包含所有的情報 不一定只派遣乙個 問最小花費 2 n 1000 建立乙個新點s,交流的人之間建邊,邊權為交流費...

JZOJ 3237 間諜派遣 最小生成樹

傳送門 每個間諜與其他間諜會面都會花費一定的費用,而最後指派某個間諜也會花費一定的費用 現在問我們在最優安排的情況下,最少需要花費的費用是多少 因為要花費最少的費用,所以直接對邊權排序,然後逐個加入圖中即可 include include include include include includ...

jzoj3237 間諜派遣 最小生成樹,並查集

一張圖,第i ii個點參加任務需要mki mk i mki 元,連線一條邊需要一定費用,要求每個聯通圖都有參加任務的點,求最小費用。其實就是求若干個最小生成樹然後這個最小生成樹的權值就是這個棵樹的所有邊權加上最小的點權。我們使用kru skal kruskal kruska l來求,我們每次合併兩個...