2020-06-22 喝了兩杯奶茶的一天

2020-06-22 喝了兩杯奶茶的一天

懶狗日常

  • LOL-ARAM-NA:勝2負3,運勢小兇。
  • 睡覺前獎勵折騰了一天的自己看看《大理寺日誌》。
  • 我被1368E耽誤太久了,下次不能再在一個題上掛那麼久了。
  • 明天有div2。
  • 我一天喝了兩次奶茶,但是我兩頓都在食堂喫(不過分吧?
  • 明天想做leetcode了。(我標籤頁開開關關好幾次就是沒做,懶死了)
  • 好像今天運勢確實不行,早上大亂鬥就初露端倪。

故障調查:PPPoE不能正常實現代理

這個內容可能有點敏感。

運行環境:win10(2020-6月剛更新)

問題描述:wifi能正常科上,但是撥號的不能。就很離奇。

而且我的故障可能是很多方面的綜合問題,簡單地說就是我的撥號網絡配置沒有設置好。

我大概從以下幾個方面做了調試:

  • 換了合適的dns服務器ip。(這個問題是ping不存在的網站給我回到localhost了)
  • 設置撥號連接的名稱爲英文,以及一些自動代理的小設置。
  • 手動在internet屬性中給當前的撥號連接設置代理地址。(這個問題是由於v2好像不會自動給撥號的做配置)

然後折騰了一下午,http請求正常能上了。

但是ping還會超時,這點我還不知道是什麼原因,但是本懶狗累了。

Codeforces Global Round 8

1368E - Ski Accidents

題意就是給你一個有向無環圖,保證每個圖出度不超過2。求一個刪點的方案,使得刪完點之後,剩下的圖沒有長度大於等於2的路徑。(刪點也就帶走了邊)要求是刪除的點數不能超過47n\frac{4}{7} n

標解的做法我有點懵,但是他好像能證明那個47n\frac{4}{7} n。畢竟是2500的難題,早知道我還是不要不自量力了。我在後面看到一個比較討巧的做法,我參考的做法

  • 建反向圖(每個點的入度數不超過2)。
  • 從拓撲序排在後面的點(其實按照題目的順序,就是從1-n)開始枚舉;
  • 每次檢查這個點是否存在一條以這個點爲起點的長度爲2的路徑。
    • 是的話就刪除這點,加入答案,注意建圖也要修改(我用了set偷懶)
    • 否則這個點是保留的。

這樣做完就是答案了,ac的時候我感覺,還有點不可思議。

但是粗糙地想一下,其實有點動態規劃的感覺,拓撲序保證了,枚舉到點i的時候,i的後繼構成的子圖已經是最優狀態。那麼下面就是貪心去判斷i加入會不會打破這個狀態就可以了。

至於爲什麼會在數量上比較優,我是這樣理解的。

每個點最多兩個入度,所以看起來,最壞情況是,每個留下的點,都有兩個前驅被刪掉了,23n\frac{2}{3} n

但其實,如果有一個保留的點,兩個前驅都被刪掉,那麼這個保留的點必有一個保留的後繼點。(不然根據上面的算法,這兩個前驅就不該刪)。

再想想其他情形也不會超過,最壞的12n\frac{1}{2} n。這樣足夠說服我自己了。

void solve(int kaseId = -1) {

    int n, m;
    cin >> n >> m;
    vint ans;
    vector<set<int>> des(n + 1);
    vector<set<int>> pre(n + 1);
    vint in(n + 1, 0), ut(n + 1, 0);


    for (int i = 1, u, v; i <= m; ++i) {
        cin >> v >> u;
        des[u].insert(v);
        pre[v].insert(u);
        in[v]++;
        ut[u]++;
    }

    for (int i = 1; i <= n; ++i) {
        bool check = false;
        for (auto d : des[i]) {
            if (!des[d].empty()) {
                check = true;
                break;
            }
        }
        if (check) {
            ans.emplace_back(i);
            for (auto p : pre[i]) des[p].erase(i);
            for (auto d : des[i]) pre[d].erase(i);
        }
    }

    cout << ans.size() << endl;
    for (auto ai:ans) {
        cout << ai << " ";
    }
    cout << endl;
}

我覺得和出題人心意相通是挺難的,能在有限時間裏想到能自洽,且有一定道理的做法就夠了。

我還想了一晚上,賊自閉。

UDP:

🌎 1:11:48
不過的確4/7是極限了

🌎 1:11:55
不可能比那個還小

伍玖 1:12:10
我不太會4/7的證明

伍玖 1:12:27
但是我感覺上是1/2的權重比較大

🌎 1:12:30
就最壞情況是一個三層的二叉樹

🌎 1:12:39
或者6層之類的

🌎 1:12:59
你這樣做會刪掉最多節點的那層 就是4個 然後總共有7個

伍玖 1:13:20
emmm確實

伍玖 1:13:23
因爲

伍玖 1:13:34
第二個樣例就是這樣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章