這道題有dalao直接o(1)搞得 然而本蒟蒻只會二分 + 貪心
這道題要使能夠容納的點最多 其實就是一張菊花圖
二分列舉直徑長度 判斷一下能夠容納的點數是否大於等於剩餘的點數
點數不夠的話我們總可以通過調節鏈的長度總可以使他合法 就完了
這道題就是一道樹狀陣列的題 我考試的時候調了兩個小時 就少了一句話 我恨
因為可以發現e的範圍很小 並且每乙個小字串都是乙個個懟在上面的
然後可以發現 對於每乙個字串的相同位置 它們模上小字串的長度的餘數都是相等的
所以可以通過狀態合併 sum[ i ][ j ][ k ][ id ]表示到了第 i 個位置 模上 j 餘數為k的位置 id號字元的個數
所以這個東西就可以通過樹狀陣列維護
對於e( u , v )這條邊而言 要使該邊一定出現在最小生成樹中
這條邊的邊權就一定要小於所有能夠除了該邊之外連通u v兩個點的鏈上的最大值的最小的那個
也就是小於u v兩個點在最小生成樹上的路徑中的最大值
所以這條邊可能會出現兩種情況
1.非樹邊
根據最小生成樹的性質可以知道 對於虛線 它的答案就是淺灰色邊中的最大值 - 1
2.樹邊
對於紅色這條邊 要使他出現在最小生成樹中 那麼他一定是連線兩個連通塊中所有邊的最小值
也就是說它小於所有黃色邊 那麼怎麼實現這個東西呢
每次遇到黃色邊 就將它的兩個端點在樹上的路徑權值分別與它的值取min(初值賦正無窮)
(因為連線這兩個連通塊的邊在樹上的路徑一定經過紅邊) 所以就達到了取min的效果
演算法就是mst... 這道題真的**量好大 改了半天cnm
**
#include #define oo 1e9using
namespace
std;
const
int n = 1e6 + 5
;int n,fa[n],fat[n],tot,nex[2 * n],tov[2 * n],ntot,nex1[2 *n];
int head1[n],val[2 * n],val1[2 * n],tov1[2 * n],head[n],co[2 *n];
int m,size[n],son[n],in[n],out[n],seq[n],dep[n],top[n],idc,f[2 *n];
int f1[4 * n],tag[4 *n],ans[n];
bool
isnot[n];
struct
edge e[n];
bool cmp(const edge & a,const edge &b)
int find_fa(int
u) void
init( )
void add(int u,int v,int
w) void add1(int u,int
v) void
build( )
else
}}void dfs1(int u,int
fa)
}void dfs2(int u,int
tp)
}void update(int
o) void build_tree1(int o,int l,int
r)
int mid = (l + r) >> 1
; build_tree1(
2 *o,l,mid);
build_tree1(
2 * o + 1,mid + 1
,r);
update(o);
}int query_tree(int o,int l,int r,int l,int
r)
int mid = (l + r) >> 1
;
int ans = 0
;
if(l <= mid) ans = query_tree(2 *o,l,mid,l,r);
if(mid < r) ans = max(ans,query_tree(2 * o + 1,mid + 1
,r,l,r));
return
ans;
}int query(int u,int
v)
if(dep[u]
ans = max(ans,query_tree(1,1,idc,in[v] + 1,in
[u]));
return
ans;
}void push_down(int
o) }
void modify(int o,int l,int r,int l,int r,int
w) push_down(o);
int mid = (l + r) >> 1
;
if(l <= mid) modify(2 *o,l,mid,l,r,w);
if(mid < r) modify(2 * o + 1,mid + 1
,r,l,r,w);
}void modify_tr2(int u,int v,int
w)
if(dep[u]
modify(
1,1,idc,in[v] + 1,in
[u],w);
}int query_tr2(int o,int l,int r,int
pos)
push_down(o);
int mid = (l + r) >> 1
;
if(pos <= mid) return query_tr2(2 *o,l,mid,pos);
else
return query_tr2(2 * o + 1,mid + 1
,r,pos);
}int
main( )
memset(tag,
0x3f3f3f,sizeof
(tag));
memset(f1,
0x3f3f3f,sizeof
(f1));
int p = f1[0
]; dep[
1] = 1
; sort(e + 1,e + m + 1
,cmp);
build( );
dfs1(
1,1); dfs2(1,1
); build_tree1(
1,1,idc);
for(int i = 1;i <= m;i ++)
}for(int i = 1;i <= m;i ++)
}for(int i = 1;i <= m;i ++) printf("
%d "
,ans[i]);
}
考試總結 CQOI2017 考試總結
再奮鬥一年,爭取ak noip2016 cqoi2017 這是去年我立的flag。看考場,電腦挺快,而且配置和評測機一樣,可以放心的在自己的電腦上卡常測試啦,好評。碼了一道fft的題,沒網只好拷著回家交,鍵盤蜜汁小,enter佔據了兩行,旁邊還有關機按鈕。座位安排奧妙重重,和巴蜀dyf大神坐在一起。...
MBA考試總結
終於考完了 mba入學統考,兩年來參加了兩次,感覺還是挺辛苦和有壓力的。第一年沒有通過是因為之前了解太遲,大概準備了 20天左右,最後還是功成垂敗。09年其實也一直沒有心情複習的,逼到最後的 20天,狠了一把勁,還是狠狠的複習了幾天,貌似今年應該可以通過了。總結經驗如下 1 如果你決定去做一件事,請...
2016 7 14考試總結。
今天的考試,總的來說不難,但是考得很差,簡直 從中暴露出對知識的掌握不牢固,練習不夠等問題。1.求 方程x1 2x2 nxn m的所有非負整數解 x1,x2,xn 的個數。這個題目在加上取餘運算後就是乙個貨幣系統的問題。也就是揹包。難以接受自己連這是個揹包問題都沒看出來。3 2.其實邪狼王的貪婪也很...