網路流24題 魔術球(最小路徑覆蓋 列舉)

2021-08-07 10:09:04 字數 2128 閱讀 3843

魔術球

題意:向n根柱子裡依次放置編號連續且遞增的球。且同一根柱子裡相鄰兩球編號和為完全平方數。求在這n根柱子裡最多能放多少球。

模型轉化:視n為路徑覆蓋數,列舉放入環中數的數量,轉化為上一題的路徑覆蓋問題。

由於「依次」放球,所以構造出的一定是有向無環圖。

每次重新建邊,不加優化的版本

#include

#include

#include

#include

using

namespace

std;

const

int sm = 4000;

const

int sn = 127200;

const

int c = 1600;

const

int inf = 0x3f3f3f3f;

int a,n,s=3201,t=3202;

int cnt,sum,ans,tot=1;

int to[sn],nxt[sn],hd[sm],w[sn];

int p[sm],lev[sm],cur[sm]; bool pf[3605];

vector

now[sm>>1],c[sm];

int min(int x,int y)

void init(int *g)

bool bfs()

}return0;}

int dfs(int x,int mx)

}return

0;}

int dinic()

return flw;

}void pre()

}}int main() while(p[u]);

ans+=now[sum].size();}}

else

if(a-ret==n+1) break;

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

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

return

0;}

每次只在dinic之後更新容量的優化版本,雖說從實際執行時間上來看優化不大,還是要mark一下這種將陣列指定位複製的memcpy用法。

複製b[u..v]到a[x..y](其中y-x==v-u)

memcpy(a+x, b+u, sizeof(int)*(v-u+1));

#include

#include

#include

#include

#include

using

namespace

std;

const

int sm = 4000;

const

int sn = 127200;

const

int c = 1600;

const

int inf = 0x3f3f3f3f;

int a,n,s=3201,t=3202;

int cnt,sum,ans,tot=1;

int to[sn],nxt[sn],hd[sm],w[sn],_w[sn];

int p[sm],lev[sm],cur[sm]; bool pf[3605];

vector

now[sm>>1],c[sm];

int min(int x,int y)

void init(int *g)

bool bfs()

}return0;}

int dfs(int x,int mx)

}return

0;}

int dinic()

return flw;

}void pre()

}}int main() while(p[u]);

ans+=now[sum].size();}}

else

if(a-ret==n+1) break;

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

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

return

0;}

網路流24題 最小路徑覆蓋 (最小路徑覆蓋)

題目 給定有向圖g v,e 設p是g的乙個簡單路 頂點不相交 的集合。如果v中每個頂點恰好在p的一條路上,則稱p是g的乙個路徑覆蓋。p中路徑可以從v的任何乙個頂點開始,長度也是任意的,特別地,可以為0。g的最小路徑覆蓋是g的所含路徑條數最少的路徑覆蓋。設計乙個有效演算法求乙個有向無環圖g的最小路徑覆...

網路流24題 魔術球問題(最小不相交路徑覆蓋)

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

網路流24題 最小路徑覆蓋問題

有向無環圖最小路徑覆蓋,可以轉化成二分圖最大匹配問題,從而用最大流解決。構造二分圖,把原圖每個頂點i拆分成二分圖x,y集合中的兩個頂點xi和yi。對於原圖中存在的每條邊 i,j 在二分圖中連線邊 xi,yj 然後把二分圖最大匹配模型轉化為網路流模型,求網路最大流。最小路徑覆蓋的條數,就是原圖頂點數,...