hdu6178 bfs 輸入輸出掛

2021-08-18 05:12:38 字數 1048 閱讀 2752

這道題是2017的多校第10場的1008.

在一棵樹上選取最小的邊集使得有k個節點每個節點都和至少乙個其他節點相連線。

了解二分匹配的話,很容易想到最優的情況肯定包含了最大二分匹配。而求一顆樹的最大二分匹配,並不需要什麼演算法,只要從葉子節點暴力(每個節點若它的父親不在點集內則將這條邊加入邊集)就可以,因為樹是乙個二分圖。

二分匹配的結果是s,設t=min(k/2,s),則答案是t+k-2*t = k-t

輸入輸出掛是第二個考點。fread是最終極的輸入輸出掛,而getchar這種初級輸入輸出掛是過不了這道題的。

//#include#include#include#includeusing namespace std;

#define lp(i,x,y) for(int i=x;i<=y;++i)

#define rlp(i,y,x) for(int i=y;i>=x;--i)

#define rep(i,x) for(int i=0;i>=1;x=x*x%m;}return ans;}

templatevoid scan(t &ret)while(c<'0'||c>'9');

while(c>='0' && c<='9')

}struct fastio

inline int xchar()

inline int xint()

~fastio()

}io;

vectoredge[n];

int q[n],top=0;

bool used[n];

int fa[n];

const int rt=1;

int bfs(int k)

} int sum=0;

mem(used,0);

while(top)

} return k-min(sum,k/2);

}int main()

printf("%d\n",bfs(k));

lp(i,1,n) edge[i].clear();

}}

hdu6178Monkeys bfs 輸入掛模板

題意 給你一顆樹,刪除最多的邊,使得k個猴子能落在n個結點上 每個猴子所在的節點周圍至少連著乙個有猴子的節點 思路 要使得剩下的邊最少,那麼兩個點只配一條邊是最優的,計算出這種邊的最大條數,如果這些邊不夠連線k個猴子,那麼每剩下乙個猴子就要多加一條邊。所以只要從度數為1的節點開始找,bfs一下就好。...

常用技巧 輸入輸出優化 輸入輸出外掛程式

我們知道cin cout是比較慢的,不過它們可以加速。在 中加入這兩句即可 std ios sync with stdio false std cin.tie 0 加速過後cin的速度與scanf的速度近似 當然,加速過後就不要混用print和cout,scanf和cin了。因為不同步,後果會很嚴重...

uva oj java輸入輸出

真難的題目 狗屁演演算法 測資很機車 測驗結果 x.xx0 ms 測驗日期 200y mm dd author raymond wu 小璋丸 publicclassmain 載入單字的字元 while bytedata 1 else bytedata system.in.read catch exc...