NOIP2012 疫情控制

2022-03-03 18:08:02 字數 1093 閱讀 5215

詳細的注釋已經寫到了**裡面。

以後這種碼量多的最好都寫成函式再呼叫,確定好每個函式的作用。

然後變數名最好也是有實際意義的qwq

#include#include#include#include#include#define maxn 500010

using namespace std;

int n,m,edge_number,cnta,cntb;

int head[maxn],f[maxn][33],dist[maxn][33];

int pos[maxn],done[maxn],used[maxn],rest_node[maxn],rest_dis[maxn];

long long l,r;

struct edgeedge[maxn<<1];

struct nodenode[maxn],b[maxn],a[maxn];

bool cmp(struct node x,struct node y)

//按照到根節點之後的剩餘路程從大到小排序

inline void add(int from,int to,int dis)

inline void init(int x,int pre,long long disdis)

for(int i=head[x];i;i=edge[i].nxt)

}//預處理倍增,沒什麼好說的

//乙個子樹如果每個葉子節點(邊境城市)到根節點的路徑上都設立了檢查點

//我們稱它被封鎖(blocked)

inline bool is_blocked(int x,int pre)

}if(!not_leaf) return 0;//如果它是邊境城市,前面卻沒有返回1(就是設立檢查點),那麼它一定沒有被封鎖

return son_all_blocked;//之後如果完全被封鎖了就返回1,沒有被完全封鎖就返回0

}inline bool check(long long limit)

return 1;

}int main()

printf("%lld\n",l);

return 0;

}

NOIP 2012 疫情控制

題目鏈結 演算法 細心觀察發現 此題的答案具有單調性,也就是說,如果p小時能控制疫情,那麼q小時也能控制疫情 q p 因此我們可以二分答案,這是此題的突破口 問題就轉化為了檢驗 mid小時是否可以控制住疫情 我們發現,既然要求所有葉子節點得到管轄,那麼,軍隊所在的節點深度越淺,所能管轄的節點數就越多...

NOIP 2012 疫情控制

h 國有 n 個城市,這 n 個城市用 n 1 條雙向道路相互連通構成一棵樹,1 號城市是首都,也是樹中的根節點。h 國的首都爆發了一種危害性極高的傳染病。當局為了控制疫情,不讓疫情擴散到邊境 城市 葉子節點所表示的城市 決定動用軍隊在一些城市建立檢查點,使得從首都到邊境 城市的每一條路徑上都至少有...

noip2012 疫情控制

h國有n個城市,這n個城市用n 1條雙向道路相互連通構成一棵樹,1號城市是首都,也是樹中的根節點。h國的首都爆發了一種危害性極高的傳染病。當局為了控制疫情,不讓疫情擴散到邊境城市 葉子節點所表示的城市 決定動用軍隊在一些城市建立檢查點,使得從首都到邊境城市的每一條路徑上都至少有乙個檢查點,邊境城市也...