p1084 傳送門
感覺noip t3也是有點東西的……
將該題轉化為最大值最小問題後想到二分答案
接下來考慮$check$時如何貪心:
由於除了在根節點所有軍隊都只往上跳明顯採取倍增的方式
記錄所有能到達根節點的軍隊和根節點下所有未被封死的子樹
將兩個序列從小到大排序後貪心匹配即可判斷
注意:在判斷封死子樹時不考慮能跳到根節點的軍隊
在匹配時用剩餘量最小的軍隊來封死原子樹即可
#include usingnamespace
std;
#define x first
#define y second
#define pb push_backtypedef
double
db;typedef
long
long
ll;typedef pair
p;const ll inf=5e14;
const
int maxn=5e4+10
;struct edgee[maxn<<2
];int n,m,x,y,w,pos[maxn],head[maxn],f[maxn][30
],dep[maxn],tot;
int vis[maxn],cnt1,cnt2;ll d[maxn][30
];struct dataa[maxn],b[maxn];
bool cmp(data x,data y)
void add(int x,int y,int
w);head[x]=tot;}
void dfs(int x,int
anc)
}bool find(int x,int
anc)
;
else
return0;}}
return f2?(!f1):0;}
bool
check(ll x)
;
else vis[t]=1
; }
if(find(1,0)) return1;
int cur=1
; memset(vis,
0,sizeof
(vis));
sort(a+1,a+cnt1+1
,cmp);
sort(b+1,b+cnt2+1
,cmp);
for(int i=1;i<=cnt2;i++)
vis[b[i].pos]=1
;
for(int i=1;i<=cnt1;i++)
}while(cur<=cnt2&&!vis[b[cur].pos]) cur++;
return cur>cnt2;
}int
main()
printf(
"%lld
",l==inf?-1
:l);
return0;
}
P1084 疫情控制
p1084 疫情控制 好像二分 倍增 樹上差分是比較熱門的考尻點 會結合在一起考,難度比較大,需要多加練習。現在在解決noip最後的幾道大題,很鵝心。也沒有人做嚮導,很難受qwq 首先這是一棵樹,乙個軍隊肯定是越往上走越好。有大佬說過,對於這種提點的題,要是用倍增 要是時間最短,就是要是用時最長的軍...
P1084 疫情控制
p1084 疫情控制 hh 國有 nn個城市,這 n 個城市用n 1條雙向道路相互連通構成一棵樹,1號城市是首都,也是樹中的根節點。hh國的首都爆發了一種危害性極高的傳染病。當局為了控制疫情,不讓疫情擴散到邊境城市 葉子節點所表示的城市 決定動用軍隊在一些城市建立檢查點,使得從首都到邊境城市的每一條...
洛谷P1084 (疫情控制)
h 國有 n 個城市,這 n 個城市用 n 1 條雙向道路相互連通構成一棵樹,1 號城市是首都,也是樹中的根節點。h 國的首都爆發了一種危害性極高的傳染病。當局為了控制疫情,不讓疫情擴散到邊境城市 葉子節點所表示的城市 決定動用軍隊在一些城市建立檢查點,使得從首都到邊境城市 的每一條路徑上都至少有乙...