魔術球問題

2022-05-09 11:39:11 字數 995 閱讀 7284

題目描述

題解:個人認為網路流二十三題中比較有意思的一道。

先列舉球數。

每加乙個球,從$s$向$xi$連一條容量為$1$的邊,從$yi$向$t$連一條容量為$1$的邊。

然後從$xi$向滿足$i+j$為完全平方數的$yj$連容量為$1$的邊。

在殘餘網路上跑$ek$或$dinic$,如果得到的最大流為$0$,說明失配,需要重開一柱。

其實就是動態的二分圖匹配。

每個球後面只能接乙個球嘛。

**:

#include#include

#include

#include

using

namespace

std;

#define n 6050

const

int inf = 0x3f3f3f3f

;int

n,s,t;

intm,tot;

int hed[n],cnt=-1

,cur[n];

struct

ege[

2000050

];void ae(int f,int t,int

w)int

dep[n];

bool

vis[n];

queue

q;bool

bfs()}}

vis[u] = 0

; }

return dep[t]!=inf;

}int dfs(int u,int

lim)

}return

fl;}

intdinic()

bool

use[n];

void print(intu)}

intmain()

printf(

"%d\n

",m-1

);

for(int i=1;i)

return0;

}

魔術球問題

列舉放的球,先假設新建柱子,拆成兩個點,第乙個點連s,表示後面還可以放 第二個連t表示放到其他柱子上 再列舉放過的數和它是否組成完全平方數,列舉的數的第乙個點向它的第二個點連邊,表示這個球可以放到其他球上,容量都為一 每次跑最大流出來的表示會消掉的柱子個數,如果此時球 消去的比n大則break輸出答...

魔術球問題

曾經在模擬賽的時候做過弱化版,不需要輸出方案。其實加強版因為資料範圍很小,模擬做也未嘗不可,暴力算出n 55時最終答案也只有1567,拿二維陣列存一下方案即可。當然,這個題是由網路流做法的,雖然我的網路流做法只是模擬了乙個貪心的過程。貪心的正確性證明就請移步我的弱化版題解好啦 對於乙個球,有兩種放法...

魔術球問題 題解

具體的數學關係還是不會證,除了能打表發現球數規律外,內在原理也弄不清楚。戳很難想象是一道網路流。第一感是數學。但是看到資料範圍比較小,估計可以暴力dp。又發現,狀態轉移比較難,狀態調整比較多,dp估計難設,又看到資料範圍又小於dp通常可做範圍,所以用同樣以規劃和狀態設計為關鍵字的,狀態調整能力更強的...