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的路徑。(刪點也就帶走了邊)要求是刪除的點數不能超過。
標解的做法我有點懵,但是他好像能證明那個。畢竟是2500的難題,早知道我還是不要不自量力了。我在後面看到一個比較討巧的做法,我參考的做法:
- 建反向圖(每個點的入度數不超過2)。
- 從拓撲序排在後面的點(其實按照題目的順序,就是從1-n)開始枚舉;
- 每次檢查這個點是否存在一條以這個點爲起點的長度爲2的路徑。
- 是的話就刪除這點,加入答案,注意建圖也要修改(我用了set偷懶)
- 否則這個點是保留的。
這樣做完就是答案了,ac的時候我感覺,還有點不可思議。
但是粗糙地想一下,其實有點動態規劃的感覺,拓撲序保證了,枚舉到點i的時候,i的後繼構成的子圖已經是最優狀態。那麼下面就是貪心去判斷i加入會不會打破這個狀態就可以了。
至於爲什麼會在數量上比較優,我是這樣理解的。
每個點最多兩個入度,所以看起來,最壞情況是,每個留下的點,都有兩個前驅被刪掉了,。
但其實,如果有一個保留的點,兩個前驅都被刪掉,那麼這個保留的點必有一個保留的後繼點。(不然根據上面的算法,這兩個前驅就不該刪)。
再想想其他情形也不會超過,最壞的。這樣足夠說服我自己了。
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
第二個樣例就是這樣