bzoj 2044 三維飛彈攔截

2021-08-10 01:31:58 字數 2003 閱讀 1848

description

一場戰爭正在a國與b國之間如火如荼的展開。 b國憑藉其強大的經濟實力開發出了無數的遠端攻擊飛彈,b國的領導人希望,通過這些飛彈直接毀滅a國的指揮部,從而取得戰鬥的勝利!當然,a國人民不會允許這樣的事情發生,所以這個世界上還存在攔截飛彈。 現在,你是一名a國負責飛彈攔截的高階助理。 b國的飛彈有效的形成了三維立體打擊,我們可以將這些飛彈的位置抽象三維中間的點(大小忽略),為了簡單起見,我們只考慮乙個瞬時的狀態,即他們靜止的狀態。 攔截飛彈設計非常精良,可以精準的引爆對方飛彈而不需要自身損失,但是a國面臨的乙個技術難題是,這些飛彈只懂得直線上公升。精確的說,這裡的直線上昇指xyz三維座標單調上公升。 給所有的b國飛彈按照1至n標號,一枚攔截飛彈可以打擊的物件可以用乙個xyz嚴格單調上公升的序列來表示,例如: b國飛彈位置:(0, 0, 0) (1, 1, 0) (1, 1, 1), (2, 2, 2) 乙個合法的打擊序列為: 乙個不合法的打擊序列為 a國領導人將乙份飛彈位置的清單交給你,並且向你提出了兩個最簡單不過的問題(假裝它最簡單吧): 1.一枚攔截飛彈最多可以摧毀多少b國的飛彈? 2.最少使用多少攔截飛彈才能摧毀b國的所有飛彈? 不管是為了個人榮譽還是國家容易,更多的是為了飯碗,你,都應該好好的把這個問題解決掉!

input

第一行乙個整數n給出b國飛彈的數目。 接下來n行每行三個非負整數xi, yi, zi給出乙個飛彈的位置,你可以假定任意兩個飛彈不會出現在同一位置。

output

第一行輸出乙個整數p,表示一枚攔截飛彈之多能夠摧毀的飛彈數。 第二行輸出乙個整數q,表示至少需要的攔截飛彈數目。

sample input

4 0 0 0

1 1 0

1 1 1

2 2 2

sample output 3 2

拓撲排序+最小路徑覆蓋

**:

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

struct ldx

s[1005];

queue

q;

int hed[1005],nex[1000005],lb[1000005],ru[1000005];

int pa[1005];

int n,ans=0,lo=0;

void add(int x,int y)

int had[2005],nax[2000005],lab[2000005],cap[2000005],dep[2005];

int loo=-1,si=2002,t=2003,mx=2147483640;

void add1(int x,int y,int num)

int dfs(int x,int num)

if(c==0) dep[x]=-1;

return c;

} bool bfs()

} return dep[t];

} int dinic_()

int main()

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

if(ru[i]==0)

while(!q.empty())

}

for(int i=1;i<=n;i++) ans=max(ans,pa[i]);

printf("%d\n",ans);

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

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

if(s[j].x>s[i].x && s[j].y>s[i].y && s[j].z>s[i].z)

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

printf("%d",n-dinic_());

return

0; }

三維凸包 BZOJ 最佳包裹

模板題解 增量法怎麼這麼強啊。擾動很重要,直接掛50分。判斷可視邊緣的方法很神奇,將每個三角面的三邊順方向打有向標記,那麼只有乙個方向有邊的點對就是邊緣點對,直接建面。總的面數是o n o n o n 複雜度為o n 2 o n 2 o n2 可以用乙個有理有據但是有點麻煩的優化 可以做到o n l...

bzoj1964 hull 三維凸包

傳送門 二維平面四個點求凸包面積 任選三個點面積之和 2 三維平面五個點求凸包體積 任選四個點體積之和 2 二維平面三個點面積 二個二維向量行列式值的絕對值 2 三維平面四個點體積 三個三維向量行列式值的絕對值 6 1 achen 2 include3 include4 include5 inclu...

bzoj2683 簡單題 三維偏序cdq分治

給定乙個n n n n n 1e5 n 1 e5 的矩陣,單點修改,區間查詢。二維樹狀陣列?空間開不下。那就換乙個辦法,記得之前用cdq分治來做樹狀陣列的時候,每乙個查詢的答案是在它前面的修改的並且修改的位置在它前面的才可以計入答案,這裡也是一樣,將每乙個詢問拆成四個字首和陣列之後,每乙個查詢的答案...