bzoj 3624 免費道路

2021-07-07 05:33:03 字數 709 閱讀 5366

第一遍只加水泥路跑kruscal,找出必須修成石子路的。第二遍kruscal把這些修石子路的修好,然後隨便修剩下的路,注意隨時判斷無解的情況

#include

#include

#include

#include

#include

#define md

#define ll long long

#define inf (int) 1e9

#define eps 1e-8

#define n 20010

#define m 100010

using namespace std;

struct yts e[2][m],q[m],ans[m];

int w[2];

int fa[n];

int find(int x)

int main();}

int tot=0;

for (int i=1;i<=w[1];i++)

}int r=0;

for (int i=1;i<=w[0];i++)

}if (tot!=n-1)

for (int i=1;i<=n;i++) fa[i]=i;

tot=0;

for (int i=1;i<=r;i++)

if (tot>k)

}for (int i=1;i<=w[0]&&tot

bzoj 3624 Apio2008 免費道路

這題一看,不是一句話題意,不想做。題意就不說了吧。首先想到的肯定是最小生成樹。然後我就想起了以前的某道題。好吧,記不大清了。我一開始的想法是貪心替換。就是先把圖構好,然後用0去換1 也就是先把全部1跑一次,然後把0跑一次,先把必要的0拿出來,然後再在剩下的0裡面選替代1的。然後隨手給自己的替代方法舉...

BZOJ3624 Apio2008 免費道路

bzoj3624 apio2008 免費道路 試題描述 輸入 輸出 輸入示例 572 1304 5132 0531 4301 2142 1輸出示例 320 4305 3112 1資料規模及約定 見 輸入 題解 第一步,先盡量加入 c 1 的邊,若未形成乙個連通塊,則得到必須加入的 c 0 的邊。第二...

BZOJ3624 APIO2008 免費道路

並查集 題目傳送門 題目要求的就是恰好包含 k 條鵝卵石路的生成樹。首先我們用水泥邊建出生成樹森林,然後再用鵝卵石邊把森林連成一棵樹。如果需要用到的鵝卵石邊大於 k 則無解。如果無法連成一棵樹則無解。連成一棵樹之後也許此時用到的鵝卵石邊比 k 要小,我們暫且稱已經用到的鵝卵石邊為必要邊。我們把樹全部...