日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[TJOI2013]拯救小矮人(反悔贪心证明),「ICPC World Finals 2019」Hobson 的火车(基环树,差分)

發布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [TJOI2013]拯救小矮人(反悔贪心证明),「ICPC World Finals 2019」Hobson 的火车(基环树,差分) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2021-09-07 test

  • [TJOI2013]拯救小矮人
  • 「ICPC World Finals 2019」Hobson 的火車

[TJOI2013]拯救小矮人

luogu4823

考試題目的數據加強為2e5,所以此題做法應為O(nlog?n)O(n\log n)O(nlogn)反悔貪心

這種有多元屬性,選擇最優的問題

如果發現簡單的貪心總是半錯半對的

解法通常有兩種

  • 設計dp進行轉移
  • 考慮反悔貪心

此題也不意外

定義每個人所需的逃出高度為H?ai?biH-a_i-b_iH?ai??bi?

observation1 : 逃出高度越高的人越先逃出

當然可能某些人的屬性是極端的,比如身高非常高而手很短,卻被派到前面,這個時候可能不讓此人逃走能讓后面的人走得更多,才是最佳方案

從這種情況上得出

observation2 : 如果斷定此人不逃出,那么就永遠不會再給機會逃出

observation3 : 如果此人不能逃出,但是前面逃出的人有高度更高的,就把最高的那個人扔回來,換成這個人逃出

到這里就可以使用優先隊列維護做了

接下來給出性質一和性質三的證明

  • 性質一:

    考慮先逃走的人逃出高度為h1h_1h1?,再逃走的逃出高度為h2h_2h2?

    則有h1>h2h_1>h_2h1?>h2?,即H?a1?b1>H?a2?b2?a1+b1<a2+b2H-a_1-b_1>H-a_2-b_2\Rightarrow a_1+b_1<a_2+b_2H?a1??b1?>H?a2??b2??a1?+b1?<a2?+b2?

    hhh為還在洞內所有人的身高包含1,2

    如果1,2都能逃出,那么1,2之間逃出的順序,對后面的人不會影響,反正都不會有身高的貢獻

    也就是說,我們需要證明當滿足h1>h2h_1>h_2h1?>h2?條件時,1更難逃出,所以需要先走

    既然2能逃走,說明不需要1的身高,即h?a1+a2+b2≥Hh-a_1+a_2+b_2\ge Hh?a1?+a2?+b2?H

    如果2先逃走,1也能逃走,則必須滿足h?a2+a1+b1≥Hh-a_2+a_1+b_1\ge Hh?a2?+a1?+b1?H

    • ?a1+a2+b2??a2+a1+b1?a2+a2+b2?a1+a1+b1-a_1+a_2+b_2\quad?\quad -a_2+a_1+b_1\Leftrightarrow a_2+a_2+b_2\quad ?\quad a_1+a_1+b_1?a1?+a2?+b2???a2?+a1?+b1??a2?+a2?+b2??a1?+a1?+b1?

      a1+b1<a2+b2?a1<a2+b2?b1a_1+b_1<a_2+b_2\Rightarrow a_1<a_2+b_2-b_1a1?+b1?<a2?+b2??a1?<a2?+b2??b1?

      a1+a1+b1<a2+b2?b1+a1+b1=a2+b2+a1a_1+a_1+b_1<a_2+b_2-b_1+a_1+b_1=a_2+b_2+a_1a1?+a1?+b1?<a2?+b2??b1?+a1?+b1?=a2?+b2?+a1?

    所以?應為>

    也就是說2逃出時超出HHH的距離更多,也就是比1逃出條件要松一點

    如果1逃走后2無法出逃,那么2逃走后1更無法逃出,且加緊了后面的約束

    當然這只是充分證明,因為會考慮逃不走換人的情況,結合反悔貪心才是最后的貪心

  • 性質三:

    對于某個不能逃出的人,選擇前面比自己高的最高的人,換進來

    這反悔貪心很顯然,換一個人進來換一個人出去,對人數沒有影響

    但是換了個更高的人進來,那么其高度就會松弛后面所有人的逃出條件,使得逃出可能性增大

    • 接下來證明,在逃出條件越后越松弛的前提下,換一個更高的人進來,自己一定可以逃出去

      假設2此時無法逃出,需要把前面的1換進來,定義hhh為在洞內的人的高度加上已經逃出的1的高度

      a1+b1<a2+b2a_1+b_1<a_2+b_2a1?+b1?<a2?+b2?a1>a2a_1>a_2a1?>a2?

      把在1,2之間逃出洞的所有人先再次丟回洞中,相當于回溯到第一次決定讓1逃出的時刻

      因為逃出高度限制是逐漸寬松的,既然這個時候1能逃出,2一定也能逃出

      考慮變成2逃出對之前在1,2中間逃出的人的影響,發現是正面影響

      因為2的高度沒有1高,相當于換了一個更高的人墊背,那么原來在1,2中間逃出的人同樣也會逃離

#include <queue> #include <cstdio> #include <iostream> #include <algorithm> using namespace std; #define int long long #define maxn 200005 priority_queue < int > q; struct node { int a, b, h; }p[maxn]; int n, H; int h[maxn];signed main() {scanf( "%lld", &n );for( int i = 1;i <= n;i ++ )scanf( "%lld %lld", &p[i].a, &p[i].b );scanf( "%lld", &H );for( int i = n;i;i -- )p[i].h = H - p[i].a - p[i].b;sort( p + 1, p + n + 1, []( node x, node y ) { return x.h > y.h; } );for( int i = n;i;i -- )h[i] = h[i + 1] + p[i].a;int now = 0, ans = 0;for( int i = 1;i <= n;i ++ ) if( now + h[i + 1] >= p[i].h ) ans ++, q.push( p[i].a );else {if( ! q.empty() and q.top() > p[i].a )now += q.top(), q.pop(), q.push( p[i].a );elsenow += p[i].a;}printf( "%lld\n", ans );return 0; }

「ICPC World Finals 2019」Hobson 的火車

LOJ6548

恰好考了一下最近學的基環樹

如果是問從每個點開始能訪問的點數,那么就非常簡單,是個外環樹

每個非環樹上的點的路徑都是一條鏈,只需要考慮深度和kkk的關系即可

但不巧的是這道題是求每個點可以被多少個點訪問到,是個內環樹

發現時間卡在設計DPDPDPkkk轉移上

很妙的,又是前幾天考試的解法就是——樹上差分和環上差分

具體細節實現可看代碼及注釋

#include <cstdio> #include <vector> using namespace std; #define maxn 500005 vector < int > G[maxn], circle; int n, k, siz, top; int ans[maxn], dep[maxn], vis[maxn], s[maxn], d[maxn];void dfs( int u, int rt ) {if( ! vis[u] ) vis[u] = 1; //在求該聯通分量時可能有些點還未訪問過 身處環遍歷后面 s[++ top] = u;if( top > k + 1 and s[top - k - 1] ^ circle[rt] ) //差分 與u點相距k+1甚至更遠的點不再有貢獻 ans[s[top - k - 1]] --;for( auto v : G[u] )if( vis[v] == 2 ) continue;//環點在后面單獨更新else { dep[v] = dep[u] + 1;dfs( v, rt );if( u ^ circle[rt] ) ans[u] += ans[v];}top --;if( dep[u] <= k ) { //會延伸到部分環點 哪怕只有一個點 //環長雖然是siz 但實際上只需要走siz-1步就會遍歷完所有環點 if( dep[u] + siz > k + 1 ) { //無法在k步內將環都覆蓋完 int t = ( rt + k - dep[u] + 1 ) % siz;/*rt+k-dep[u]是真正差分的結束位置需要在結束位置的下一位pos+1打上-1抵消標記 */ans[circle[rt]] ++, ans[circle[t]] --;if( t < rt ) ans[circle[0]] ++;/*由于環差分也是從環頭遍歷到環尾 默認斷開了環頭與環尾的邊 該if成立說明覆蓋的部分點跨越了環尾在環頭多延伸了一點 環頭到結束位置也應該差分*/ }else ++ ans[circle[0]]; //該點可以訪問所有環點 直接在環頭++ }if( u ^ circle[rt] ) ans[u] ++; }void dfs( int now ) {circle.clear();while( vis[now] ^ 2 ) { //如果now點先前已經被遍歷2次 也就是回到了環頭 不再重復入環 if( vis[now] ) circle.push_back( now ); //再次經過now點說明是環上一點 開始進入求環部分 vis[now] ++;now = d[now];}siz = circle.size();for( int i = 0;i < siz;i ++ )//先差分求每個環點的非環樹答案 dfs( circle[i], i );for( int i = 1;i < siz;i ++ )//環差分 ans[circle[i]] += ans[circle[i - 1]]; }int main() {scanf( "%d %d", &n, &k );for( int i = 1;i <= n;i ++ ) {scanf( "%d", &d[i] );G[d[i]].push_back( i );//建反圖 }for( int i = 1;i <= n;i ++ )if( ! vis[i] ) dfs( i );for( int i = 1;i <= n;i ++ )printf( "%d\n", ans[i] );return 0; } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的[TJOI2013]拯救小矮人(反悔贪心证明),「ICPC World Finals 2019」Hobson 的火车(基环树,差分)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 视频在线播放 | 亚洲精品久久久久久久久久 | 少妇一级淫片免费放中国 | 亚洲一区中文字幕永久在线 | 亚洲毛片a | 国产精品欧美久久久久久 | 国产高清一区二区 | 亚洲一区二区在线免费观看 | 日本免费黄色网 | 99自拍视频在线观看 | 九色porny原创自拍 | 精射女上司 | 性欧美lx╳lx╳ | 宅男噜噜噜666在线观看 | 人乳喂奶hd无中字 | 国产xx在线观看 | 欧美色综合网 | 18深夜在线观看免费视频 | 国产成人无码AA精品区 | 久久av网| 欧美浮力影院 | 国产又爽又黄免费视频 | 麻豆视频国产精品 | 日韩欧美有码 | 欧美特级特黄aaaaaa在线看 | 久久女同互慰一区二区三区 | 久久禁| 丁香色婷婷| 久久精品人人做人人爽 | 国产人成视频在线观看 | 99riav国产精品视频 | 天堂网视频 | 成人18视频在线观看 | 欧洲熟妇的性久久久久久 | 日本高清网站 | 美女被男人插 | 国产精品久久久久久婷婷天堂 | 久久毛片基地 | 欧美人妻少妇一区二区三区 | 久久久精品欧美 | 久久成人乱码欧美精品一区二区 | 丰满人妻综合一区二区三区 | 日韩毛片一级 | 一本高清dvd在线播放 | 高清中文字幕av | 人av在线 | 日韩在线你懂的 | 久久在线电影 | 国产成人精品在线 | 与子敌伦刺激对白播放的优点 | 日韩精品自拍 | 亚洲网站在线播放 | 可以看毛片的网站 | 国产欧美一区二区三区在线 | 欧美人与禽zozzo禽性配 | 伊人久久五月天 | 九七超碰在线 | 与子敌伦刺激对白播放的优点 | 中文免费在线观看 | 亚洲色图35p | 奇米一区二区 | 欧美日韩综合视频 | 欧美少妇喷水 | 农村黄色片 | 日韩精品国产一区二区 | 国产视频精品在线 | 91播放在线| 成人性生交大片免费 | wwwxxxx国产| 成人免费午夜视频 | 少妇真人直播免费视频 | 成人久久久精品乱码一区二区三区 | 97精品一区二区 | 国产精品影院在线观看 | 欧美午夜一区二区三区 | a√天堂资源在线 | 国产97av| a天堂视频| 淫片一级国产 | 国产美女免费无遮挡 | 欧美天天干 | 成人欧美一区二区三区黑人 | 欧美丰满美乳xxx高潮www | 波多野结衣视频观看 | 久久久久久久毛片 | 国产高清精品一区二区三区 | 国产精品伦一区二区三级视频 | 欧美一区二区三区视频在线观看 | 91成人天堂久久成人 | 精品国产二区三区 | 中文日韩在线观看 | 久久精品99久久久 | 亚洲福利在线观看 | 无人码人妻一区二区三区免费 | 在线看成人片 | 欧美日韩国产亚洲沙发 | 操女人的逼逼 | 欧美三级韩国三级日本三斤在线观看 | 极品少妇在线观看 |