description
魔杖**freda融合了四件**,於是魔杖頂端緩緩地生出了一棵四葉草,四片葉子煥發著淡淡的七色光。聖劍**rainbow取出了乙個圓盤,圓盤上鑲嵌著n顆寶石,編號為0~n-1。第i顆寶石的能量是ai。如果ai>0,表示這顆寶石能量過高,需要把ai的能量傳給其他寶石;如果ai<0,表示這顆寶石的能量過低,需要從其他寶石處獲取-ai的能量。保證sigma(ai)=0。只有當所有寶石的能量均相同時,把四葉草魔杖插入圓盤**,才能開啟超自然之界的通道。
不過,只有m對寶石之間可以互相傳遞能量,其中第i對寶石之間無論傳遞多少能量,都要花費ti的代價。探險隊員們想知道,最少需要花費多少代價才能使所有寶石的能量都相同?
input
第一行兩個整數n、m。
第二行n個整數ai。
接下來m行每行三個整數pi,qi,ti,表示在編號pi和qi的寶石之間傳遞能量需要花費ti的代價。資料保證每對pi、qi最多出現一次。
output
輸出乙個整數表示答案。無解輸出impossible。
sample input
3 350 -20 -30
0 1 10
1 2 20
0 2 100
sample output
data constraint
對於50%的資料,2<=n<=8。
對於100%的資料,2<=n<16,0<=m<=n*(n-1)/2,0<=pi,qi
1、找出所有能量為0的集合。若該集合的點是聯通的,那麼求出該集合的mst,生成樹的值就是該集合能量轉移所需的最小代價。
2、將每一集合為0的集合看成是乙個物品,利用揹包動態規劃求出最優解。
用二進位制來壓縮狀態,1代表節點在集合中,0代表不在。
比如數字s的二進位制形式為100111,表明0,1,2,5號節點在s表示的集合中。
題目最多有n(n<=16)個節點,因此s的範圍是0到(2^n)-1
用陣列sum[s],記錄集合s中包含的節點的能量之和。
對於每乙個能量和為0的集合x(sum[x]==0),若能得到一棵最小生成樹,用陣列value[x]記錄下該生成樹的代價
f[i]記錄平衡集合i中的節點的能量值,所需最小代價
對於集合i和j,若滿足sum[i]==0且sum[j]==0
那麼有f[i|j]=min(f[i|j],f[i]+cost[j]);
i|j表示集合i與集合j合併之後的集合
code
#include
#include
#include
#include
#include
#define fo(i,a,b) for (int i=a;i<=b;i++)
#define fd(i,a,b) for (int i=a;i>=b;i--)
#define n 20
#define two 65536+5
#define inf 214748364
struct record
a[n*(n-1)/2];
using
namespace
std;
int dad[n],f[two],power[n],sum[two],value[two];
int n,m;
bool cmp(record a,record b)
int kruskal(int s)
}if (tree_tot+1
return inf;
else
return ans;
}int main()
if (f[tot]==inf) printf("impossible\n");
else
printf("%d\n",f[tot]);
return
0;}
standard process
[cpp] view plain copy print?
#include
#include
#include
using
namespace
std;
const
int inf=1000000000;
struct nodeedge[150];
int n,m,a[17],father[17],sum[1
<<17],cost[1
<<17],f[1
<<17];
bool cmp(node a,node b)
int kruskal(int s) //討論狀態s中包含的點,構成的最小生成樹
for(i=1;i<=m;i++)
if(((s>>edge[i].x)&1)&&((s>>edge[i].y)&1))//判斷狀態s中是否包含了邊i的兩個端點
} if(cnt+1!=tot) return inf; //若cnt+1else
return mincost;
} int main()
}
if(f[tot]==inf)printf("impossible\n");else
printf("%d\n",f[tot]);
return
0;
}
四葉草 介面
介面是一種新的抽象模板 所以我們用新的關鍵字來表示介面 inte ce。其實,介面是對類的補充。因為類是單繼承的,介面可以實現多繼承。我們學習的時候,可以介面當做是乙個更加抽象的抽象類。介面定義 修飾符 inte ce 介面名 預設例項方法 public default 返回值型別 方法名 引數 案...
四葉草 泛型
概念 泛型是一種未知的資料型別,引數化動態資料型別。e e element元素 t t type型別等 使用泛型和不使用泛型的區別 不適用泛型 好處 集合不使用泛型,預設型別是object型別,可以儲存任意型別 弊端 不安全,會引發型別轉換異常 泛型使用 泛型 引用資料型別 一般用26個大寫字母 最...
再看《蜂蜜與四葉草》
生活總會有百無聊賴的時候,前段時間曾幾度想翻開這第二季來看,但是第一季的句號畫得實在真太漂亮了,而常聽說續集質量都會大不如前,所以心怕會影響 第一季給我留下的美感,遲遲沒敢看。事隔十個月的今天,在第一季還在心中留有餘韻的情況下,我還是把第二季看完了 結論是沒讓我失望,這部作品真的很優 秀,細膩清新的...