time limit: 30 sec memory limit: 128 mb
submit: 1062 solved: 576
[submit][status][discuss]
小銘銘最近進入了某情報部門,該部門正在被如何建立安全的通道連線困擾。
該部門有 n 個情報站,用 1 到 n 的整數編號。給出 m 對情報站 ui;vi 和費用 wi,表示情
報站 ui 和 vi 之間可以花費 wi 單位資源建立通道。
如果乙個情報站經過若干個建立好的通道可以到達另外乙個情報站,那麼這兩個情報站就
建立了通道連線。形式化地,若 ui 和 vi 建立了通道,那麼它們建立了通道連線;若 ui 和 vi 均
與 ti 建立了通道連線,那麼 ui 和 vi 也建立了通道連線。
現在在所有的情報站中,有 p 個重要情報站,其中每個情報站有乙個特定的頻道。小銘銘
面臨的問題是,需要花費最少的資源,使得任意相同頻道的情報站之間都建立通道連線。
第一行包含三個整數 n;m;p,表示情報站的數量,可以建立的通道數量和重要情報站的數
量。接下來 m 行,每行包含三個整數 ui;vi;wi,表示可以建立的通道。最後有 p 行,每行包含
兩個整數 ci;di,表示重要情報站的頻道和情報站的編號。
輸出一行乙個整數,表示任意相同頻道的情報站之間都建立通道連線所花費的最少資源總量。
5 8 4
1 2 3
1 3 2
1 5 1
2 4 2
2 5 1
3 4 3
3 5 1
4 5 1
1 11 2
2 32 4
4選擇 (1; 5); (3; 5); (2; 5); (4; 5) 這 4 對情報站連線。
對於 100% 的資料,0 20000。
/*斯坦納森林
每一棵斯坦納樹都是乙個斯坦納樹裸題啊
分兩步dp:
1.列舉子集
2.spfa
最後合併就好了。
*/#include
#include
#include
#include
#define maxn 1050
using
namespace
std;
intn,m,p,oo;
intg[maxn],f[maxn][maxn],c[maxn],d[maxn],bin[maxn],num,head[maxn];
bool
vis[maxn];
queue
q;struct nodee[20010
];void insert(int
from,int to,int
v)void spfa(int
s) }
} }bool check(int
s)
return1;
} int
qread()
while(ch<='
9'&&ch>='
0')i=i*10+ch-'
0',ch=getchar();
return i*j;
}int
main()
for(int i=1;i<=p;i++)c[i]=qread(),d[i]=qread();
for(int i=1;i<=p;i++)
for(int j=1;j<=p;j++)
if(c[i]==c[j])bin[i]|=(1
<<(j-1
)); memset(f,
0x3f,sizeof
(f));
memset(g,
0x3f,sizeof
(g));
for(int i=1;i<=p;i++)f[d[i]][1
<1]=0;oo=g[0
];
for(int s=1;s<(1
<)
spfa(s);
if(!check(s))continue
;
for(int i=1;i<=n;i++)g[s]=min(g[s],f[i][s]);
for(int i=s;i;i=(i-1)&s)g[s]=min(g[s],g[i]+g[s^i]);
}printf("%d
",g[(1
<1
]);
}
bzoj4006 JLOI2015 管道連線
傳送門 思路 一眼看上去很像斯坦納樹 但是限制稍有不同,只要每種顏色的點聯通即可 也就是說最後可能是森林 我聽說裸寫斯坦納樹有90 所以我們要在外面再套一層dp f i j 還是斯坦納樹的狀態,i是以i為根,j是狀態為j 先用斯坦納樹求出每種聯通狀況的最小費用 再設dp i 表示i這個狀態的最小費用...
bzoj4006 JLOI2015 管道連線
小銘銘最近進入了某情報部門,該部門正在被如何建立安全的通道連線困擾。該部門有 n 個情報站,用 1 到 n 的整數編號。給出 m 對情報站 ui vi 和費用 wi,表示情 報站 ui 和 vi 之間可以花費 wi 單位資源建立通道。如果乙個情報站經過若干個建立好的通道可以到達另外乙個情報站,那麼這...
BZOJ 4006 JLOI2015 管道連線
bzoj 4006 jloi2015 管道連線 斯坦納樹 題意 小銘銘最近進入了某情報部門,該部門正在被如何建立安全的通道連線困擾。該部門有 n 個情報站,用 1 到 n 的整數編號。給出 m 對情報站 ui vi 和費用 wi,表示情 報站 ui 和 vi 之間可以花費 wi 單位資源建立通道。如...