詳細的注釋已經寫到了**裡面。
以後這種碼量多的最好都寫成函式再呼叫,確定好每個函式的作用。
然後變數名最好也是有實際意義的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國的首都爆發了一種危害性極高的傳染病。當局為了控制疫情,不讓疫情擴散到邊境城市 葉子節點所表示的城市 決定動用軍隊在一些城市建立檢查點,使得從首都到邊境城市的每一條路徑上都至少有乙個檢查點,邊境城市也...