題目點這裡
最小路徑覆蓋問題
,這道題,一開始我花了100多ms,看了下排行榜,,發現個10多ms的。看了很久他的**,才明白怎麼回事。同時更加加深了我對匈牙利演算法的理解。
我從他的**中學到的是
(1) 若多加幾條邊,並不需要重新跑一邊匈牙利,只需要從沒匹配的點開始dfs就可以了,
(2)若因為多加了乙個點,從而多加了邊,只需要從這個點dfs一次就好了,,不需要重新跑匈牙利
果然,要多看別人**啊~
不過這題還有乙個神一般的貪心演算法,大概是
第乙個球球當然是放在第乙個柱子裡面了
以後每乙個球都從第乙個柱子開始判斷是否能放進去,如果可以的話就放啦,如果不行就新開乙個啦。。不能再開就完啦。
然而,,我沒有證明出來這個為什麼正確,,有誰知道的,,求留個言啊
#include#include#include#include#include#include#include#include#include#define mx 3333
#define m 1555
#define inf 0x3f3f3f3f
#define mem(x,y) memset(x,y,sizeof(x))
#define fin freopen("input.txt","r",stdin)
using namespace std;
int nx,ny,n;
int head[mx],rear;
struct edge
edge[22*mx];
void edge_init()
void edge_add(int a,int b)
bool vis[mx];
int matchxy[mx],matchyx[mx];
bool hungarian_dfs(int u)
}return 0;
}bool vvis[3333]= ;
void init()
int main()
for(int i=0; i
線性規劃與網路流24題 04魔術球問題
1739 魔術球問題 time limit 1000ms memory limit 65536k total submit 39accepted 20 page view 230 special judged submit status discuss font size aa aa aa 假設有n...
線性規劃與網路流24題 4 魔術球
線性規劃與網路流24題 4 魔術球 description 假設有n根柱子,現要按下述規則在這n根柱子中依次放入編號為 1,2,3,的球。1 每次只能在某根柱子的最上面放球。2 在同一根柱子中,任何2個相鄰球的編號之和為完全平方數。試設計乙個演算法,計算出在n根柱子上最多能放多少個球。例如,在4 根...
網路流24題 魔術球問題
列舉答案轉化為判定性問題,然後最小路徑覆蓋,可以轉化成二分圖最大匹配,從而用最大流解決。列舉答案a,在圖中建立節點1.a。如果對於i具體方法可以順序列舉a的值,當最小路徑覆蓋數剛好大於n時終止,a 1就是最優解。由於是順序放球,每根柱子上的球滿足這樣的特徵,即下面的球編號小於上面球的編號。抽象成圖論...