HDU5934 Bomb(強連通分量分解)

2021-07-24 08:44:01 字數 1086 閱讀 4014

題意:給出n個炸彈座標、**範圍、**費用,如果某乙個炸彈在另乙個炸彈的**範圍內(上),那麼該炸彈也能**,問引爆所有炸彈最小的費用

思路:強連通分量分解,將所有點縮點,然後引爆所有入度為0的點即為最小費用

#include#include#include#includetypedef long long ll;

const int maxn = 1e3 + 10;

const ll inf = 1e18;

using namespace std;

vectorg[maxn];

vectorrg[maxn];

vectorvs;

int use[maxn], topo[maxn];

int n, m, s, t, kase = 1;

ll x[maxn], y[maxn], r[maxn];

ll c[maxn], cost[maxn];

int res[maxn];

void add(int f, int t)

void dfs(int u)

vs.push_back(u);

}void rdfs(int u, int k)

}int scc()

memset(use, 0, sizeof(use));

for(int i = vs.size() - 1; i >= 0; i--)

return k - 1;

}bool cover(int i, int j)

int main()

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

}int num = scc();

ll ans = 0;

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

memset(use, 0, sizeof(use));

vs.clear();

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

}printf("case #%d: %lld\n", kase++, ans);

}return 0;

}

HDU 5934 Bomb 強連通分量縮點

題意 n個炸彈都有乙個座標乙個 半徑以及乙個引爆花費,如果乙個炸彈在另乙個炸彈的 範圍內,則引爆另乙個炸彈,可以導致當前炸彈也 如果當前炸彈的 範圍有其它未炸的炸彈,那麼也能導致這些炸彈 以此聯動。思路 如果i炸彈的 範圍內有j炸彈,則建有向邊i j,然後縮一下點,每個強連通分量內只要引爆乙個,其它...

HDU 5934 Bomb (強連通分量縮點)

題解 題意 有n個炸彈,每個炸彈具有三個屬性值 座標 x,y 引爆半徑r以及引爆成本c。當引爆一枚炸彈時,這枚炸彈會同時引爆其 半徑內的所有炸彈,問引爆所有炸彈的最小成本。思路 乙個炸彈引爆另乙個炸彈可以看做是一條有向邊,那麼所有炸彈的引爆關係就是乙個有向圖。對於有向圖只要引爆入度為0的點就可以將整...

HDU 5934 Bomb(強連通分量縮點)

題目 顯然可以想到引爆花費最小需要選擇能引爆盡量多的,如果a能引爆b,b能引爆c,一定是引爆a最優。如果有一些點可以相互引爆,那麼就引爆這些點裡花費最小的。能互相引爆 這顯然是乙個強連通分量,因此用tarjan求強連通分量之後,對於每個拓撲序最開頭 入度為0 的連通分量,選擇花費最小的進行引爆,即可...