傳送門
將和為平方數的兩個數連邊 , 從小到大列舉數 , 每次插入乙個數就新加邊
加了過後跑一遍網路流 , 如果發現流為0 , 那麼這個數只能新作為乙個開頭
否則 , 我們就可以將它排在後面 , 然後個數 -= 最大流[想一想]
我們發現個數大於n時 , 列舉到的now-1就是答案
#include#define n 5005
#define m 500050
#define inf 0x3fffffff
using namespace std;
int first[m],next[m],to[m],w[m],tot=1,cnt;
int dis[m],n,st,ed,is[n*n],vis[m],ans[m];
void add(int x,int y,int z)
bool bfs()
} }return false;
}int dfs(int u,int flow)
}if(flow) dis[u] = -1;
return ans;
} void printf(int u)
}int dinic()return ans;
}int main()
}}
網路流 魔術球問題
題目鏈結 題目描述 問題描述 假設有 n 4 leq n leq 55 根柱子,現要按下述規則在這 n 根柱子中依次放入編號為 1,2,3,的球。1 每次只能在某根柱子的最上面放球。2 在同一根柱子中,任何 2 個相鄰球的編號之和為完全平方數。試設計乙個演算法,計算出在 n 根柱子上最多能放多少個球...
網路流 24 題 魔術球
假設有 n n n 根柱子,現要按下述規則在這 n n n 根柱子中依次放入編號為 1,2,3,4,1,2,3,4,cdots 1,2,3,4,的球。每次只能在某根柱子的最上面放球。在同一根柱子中,任何 2 2 2 個相鄰球的編號之和為完全平方數。試設計乙個演算法,計算出在 n n n 根柱子上最多...
網路流 24 題 4 魔術球
題意 有n根柱子可以放球,球上的權值從1向後標。要求這n根柱子滿足 任意一根柱子上相鄰兩個球的和是乙個完全平方數 小的球在下面,大的球在上面 輸出最多放多少個球,和其中的一種方案。分析 第一想法是打表,是不是沒救了 然後首先就是考慮到了二分.然而範圍十分神奇.可以說是猜出來的。然後就是考慮把一些球連...