JLOI2015 通道連線

2021-08-13 21:14:48 字數 2106 閱讀 6490

輸入1:

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 1

1 2

2 3

2 4

輸入2:

5 8 4

1 2 2

1 3 2

1 5 1

2 4 2

2 5 2

3 4 2

3 5 1

4 5 1

1 1

1 2

2 3

2 4sample output

輸出1:

4 【樣例說明1】

選擇(1,5), (3, 5), (2, 5), (4, 5) 這4 對情報站連線。

輸出2:

4 【樣例說明二】

選擇(1,2), (3, 4) 這2 對情報站連線。

多個點的聯通容易聯想到斯坦納樹

但是已經忘記了怎麼打了

看了一下之後發現是鬆弛(spfa)加上自己與自己的配對

其實就是包含很多劣解以及最優解的乙個做法

可是這題不用形成一棵樹,只要每種顏色都在同乙個聯通塊就可以了

那麼再設dp[x]表示當前完成的狀況為x,保證每一次新加的森林都是包含若干完整顏色的就好了

#include

#include

#include

#include

#include

#define fo(i,a,b) for(i=a;i<=b;i++)

#define min(x,y) ((x)

using

namespace

std;

const

int maxp=13,maxn=3005;

int fi[maxn],ne[maxn*2],dui[maxn*2],dui1[maxn*2],qc[maxn];

int f[1005][1

<3],cc[maxn],dp[1

bool zh[1

void add(int x,int y,int z)

void spfa(int z)

}k=ne[k];

}bz[x]=false;

}}int main()

fo(i,1,p)

cc[0]=1;

fo(i,1,10) cc[i]=cc[i-1]*2;

fo(i,1,10)

memset(f,3,sizeof(f)); cz=f[1][1];

fo(i,1,n) f[i][0]=0;

fo(i,1,p) f[a[i][2]][cc[i-1]]=0;

fo(i,1,cc[p]-1)

if (f[j][i]true;}}

spfa(i);

}fo(i,1,cc[p]-1)

}memset(dp,66,sizeof(dp)); dp[0]=0;

fo(i,1,cc[p]-1)if (zh[i])

}printf("%d",dp[cc[p]-1]);

return

0;}

JLOI2015 管道連線

小銘銘最近進入了某情報部門,該部門正在被如何建立安全的通道連線困擾。該部門有 n 個情報站,用 1 到 n 的整數編號。給出 m 對情報站 ui vi 和費用 wi,表示情報站 ui 和 vi 之間可以花費 wi 單位資源建立通道。如果乙個情報站經過若干個建立好的通道可以到達另外乙個情報站,那麼這兩...

JLOI2015 管道連線

題意 給定一張n個點m條邊的無向圖,有p個關鍵點,分成了c類。連通每條邊有乙個代價 w i 求最小代價使得同一類的關鍵點都聯通。n leq 1000,p leq 10 題解 如果直接跑斯坦納樹會強行把所有關鍵點聯通,但實際上兩類關鍵點不一定非要聯通。相當於我們求了一棵斯坦納樹,但要求的是斯坦納森林。...

JLOI2015 裝備購買

有n件裝備 每個裝備有m個引數和乙個 如果某個裝備能夠被已經買過的裝備組合出來 即 b1zi1 bpzip zh b 是實數 那麼就不需要買這件裝備 求最多的買裝備數和最少的錢 大佬 線性基裸題 我 不會啊 線性相關 一組資料中有乙個或者多個量可以被其餘量表示。所以題面顯然就是線性相關的定義,直接上...