description
兔紙王國中有 nn 個城市,第 ii 個城市和第 jj 個城市的距離是 di,jdi,j (保證di,j=dj,i且di,i=0di,j=dj,i且di,i=0) 。
兔紙們使用兩種蘿蔔來修路,分別是富含胡蘿蔔素的蘿蔔和富含維生素cc的蘿蔔,單價分別是p1,p2p1,p2。由於經濟蕭條,所以兩種蘿蔔的上限分別是q1,q2q1,q2。
現在兔紙們希望修建若干條道路,使得任意兩個城市聯通。既然經濟蕭條的話,它們希望知道最小的總費用。顯而易見的,兔紙們是不會同意一條道路上存在兩種蘿蔔的。
input specification
第 11 行, 11 個整數 nn。
第 22 行到第 n+1n+1 行, nn 個整數di,jdi,j。
第 n+2n+2 行, 44 個整數 p1,p2,q1,q2p1,p2,q1,q2 。
output specification
第 11 行, 11 個整數, 表示最小的總費用。無解則輸出 -1 。
input and output sample
[input 1]
20 2
2 02 3 1 3
[output 1]
6[input 2]
30 1 3
1 0 2
3 2 0
1 2 5 0
[output 2]
3extra input sample
extra output sample
data restriction
對於 30% 的資料, 1≤n≤51≤n≤5。
對於 60% 的資料, 1≤n≤201≤n≤20。
對於 100% 的資料, 1≤n≤1,000,∀i≠j:1≤di,j≤1,000,0≤p1,p2,q1,q2≤1,000,0001≤n≤1,000,∀i≠j:1≤di,j≤1,000,0≤p1,p2,q1,q2≤1,000,000。
【思路】先找出最短路,然後用揹包,用bitset可以省時間和空間,其中f[ i ]表示是否有和為i的方案
【**】
#include #include #include #include #include #include #define ll long long
#define maxn 1003
#define inf 10000000000013
using namespace std;
bitset<1000006>f;
struct data
} q1=get(),q2=get(),p1=get(),p2=get();
sort(e+1,e+1+cnt);
}int getfa(int x)
void solveit(){
int t=0;f[0]=1;
for(int i=1;i<=n;++i)fa[i]=i;
for(int i=1;i<=cnt;++i){
int x=getfa(e[i].u),y=getfa(e[i].v);
if(x!=y){
f|=f<
最小生成樹 次小生成樹
一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 1.兩點之間的路徑是唯一的。2.邊數等於點數減一。3.連線任意兩點都會生成乙個環。對於乙個無向聯通圖g的子圖,如果它包含g的所有點,則它被稱為g的生成樹,而各邊權和最小的生成樹則被稱...
51nod1640 最小生成樹
題意 在一副圖中,搞n 1條邊,使得每個點都相連,有多種可能的情況,所以求一種使得其中n 1條邊的最大是所有可能的最小,然後並保證連線的n 1條邊的權值總和最大 思路 一開始沒有看清題意,隨便寫了一發 最大生成樹 連案例都跑不出,原來還有個條件是有n 1條邊中的最大值是所有可能的最小。然後窩就納悶了...
最小生成樹
package 圖 最小生成樹是用最少的邊吧把所有的節點連線起來。於是和圖的深度優先搜素差不多。class stack public void push int key public int pop 檢視棧頂的元素 public int peek public boolean isempty cla...