NOIP2015提高組Day2T3 運輸計畫

2021-08-31 03:58:13 字數 1483 閱讀 2623

傳送門

tips

如果兩個點的lca會被反覆用到,就可以拿乙個陣列存下來,避免反覆計算

analysis

又是一道好喵喵喵妙的題啊!!!樹上差分太棒了,簡直太厲害

不過首先我們得看出來這是一道二分可以解決的問題

然後問題就變成了怎麼check

看看gsj大佬怎麼說吧

code

注意常數因子帶來的程式效率上的影響。

所以樹鏈剖分貌似要快得多

但……hhh,寫的倍增

#include

#define in read()

#define n 600009

#define m 600009

using

namespace std;

inline

intread()

return f==

1?res:

-res;

}int n,m,dis[n]

,dep[n]

,val[n]

;int nxt[m]

,to[m]

,head[n]

,w[m]

,ecnt=0;

inline

void

add(

int x,

int y,

int z)

int fa[n][25

];struct nodep[n]

;void

dfs(

int u,

int fu)

}inline

intgetlca

(int x,

int y)

}return fa[x][0

];}int maxn,num,s[n]

,del;

void

dfs(

int u)

if(s[u]

==num) del=

max(del,val[u]);

}inline

bool

check

(int std)

}dfs(1

);if(maxn-del<=std)

return1;

return0;

}int

main()

dfs(1,

0);for

(j=1

;j<=19;

++j)

for(i=

1;i<=n;

++i)

fa[i]

[j]=fa[fa[i]

[j-1]]

[j-1];

for(i=

1;i<=m;

++i)

int l=

0,r=maxn,ans=0;

//while

(l<=r)

cout

}

NOIP2015提高組Day2 運輸計畫

其實題目說那麼多,一句話就是 給定一棵帶權樹與m mm條路徑,你可以使一條樹上的邊的權值變為0,問你m mm條路徑的長度的最大值最小是多少。這道題讓我想到了貨車運輸這道題,但是更難,但方法可以借鑑。因為這是最大值最小問題,很顯然可以二分答案。那這個二分判斷怎麼打呢?我們如果遇到某條邊,所有超時的邊 ...

Noip2015提高組總結

總體而言noip還行吧,每天前兩題都穩穩地,但是最後一題做得不好。day1,看完題目後,第一題簽到,第二題很直觀想出來了,又畫了個圖驗證了一下,tarjan雖然可能爆棧,但人工棧就沒問題了。第三題認為是dp一類的東西。畢竟是第一次提高組,還是挺緊張的,一二題打得特別仔細特別慢,對拍,肉眼查錯,搞了接...

NOIP2015提高組解析

題目見此 day1 神奇的幻方 裸裸的模擬 其實也可以發現規律 i 1在i的右上方,如果已經有數了,就填在i的下方 include includeusing namespace std int a 50 50 int nx,ny,n int main else elseelse a tx ty i ...