網路流24題之魔術球問題

2022-03-27 07:14:06 字數 1119 閱讀 4114

其實每個柱子就相當於最小路徑覆蓋中的一根柱子。

我們要在有n條路徑的最小覆蓋中加盡量多的點。

所以我們列舉答案加邊即可。

by:大奕哥

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9

using

namespace

std;

10const

int n=100005;11

int n,m,s=0,t=100000,head[n],d[n],vis[n],w[n],cnt=-1

;12 inline int

read()

15while(ch>='

0'&&ch<='

9')x=(x<<1)+(x<<3)+ch-'

0',ch=getchar();

16return x*f;17}

18struct

nodee[n<<1

];21

void add(int x,int y,int

w)22

26 queueq;

27bool bfs(int x,int

y)2841}

42return d[y]!=-1;43

}44int dfs(int x,int w,int

yy)45

56 e[i].w-=flow;e[i^1].w+=flow;

57 vis[x]=y;s+=flow;

58if(s==w)return

s;59}60

return

s;61}62

intdinic()

6368

return

ans;69}

70int

main()

7183 printf("

%d\n

",num-1

);84

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

8595 printf("\n"

);96}97

return0;

98 }

網路流24題 魔術球問題

列舉答案轉化為判定性問題,然後最小路徑覆蓋,可以轉化成二分圖最大匹配,從而用最大流解決。列舉答案a,在圖中建立節點1.a。如果對於i具體方法可以順序列舉a的值,當最小路徑覆蓋數剛好大於n時終止,a 1就是最優解。由於是順序放球,每根柱子上的球滿足這樣的特徵,即下面的球編號小於上面球的編號。抽象成圖論...

魔術球問題(網路流24題)

假設有n根柱子,現要按下述規則在這n根柱子中依次放入編號為1,2,3,的球。1 每次只能在某根柱子的最上面放球。2 在同一根柱子中,任何2個相鄰球的編號之和為完全平方數。試設計乙個演算法,計算出在n根柱子上最多能放多少個球。例如,在4 根柱子上最多可放11 個球。對於給定的n,計算在n根柱子上最多能...

網路流24題 魔術球問題

以珠子為點,滿足條件就兩兩連邊 那麼就是讓你求n條路徑最多能覆蓋多少節點。眾所周知,最小邊覆蓋 點總數 最大匹配 不會看這裡link 於是拆點跑二分圖即可 大概就是s向x連邊 滿足條件的點k向x 連邊 x 向t連邊 有兩種方式 1.我們輪流加點,每次在殘量網路跑最大流就可以了 2.我們二分答案,每次...