很奇妙的一題,實際上如果你寫過類似的題目並不難想
我們考慮裸暴力的寫法
從1點開始暴力dfs,暴力判斷當前點是否可以走(沒有走過或者道路摧毀)
這樣你只能拿到低的可憐的暴力分
我們考慮上述寫法的問題在什麼地方,我們的dfs是這樣寫的
void
dfs(
int k)
}}
問題就出在這個for迴圈上,如果全部尋找一遍,那麼複雜度肯定承受不了
那麼問題自然而然的就變成了我們如何減少列舉次數。
也比較簡單,縮點。
對於一段連續的已經被走過的區間,我們把它縮成乙個節點,這樣,保證了乙個點不會被列舉多次
如何實現呢,我們擁有各種各樣亂七八糟的演算法,並查集,鍊錶都可以
然後對於我們列舉到的點,判斷道路是否被毀就可以了,hash或者map隨你嘍
蒟蒻比較菜,猜複雜度應該是o(n
+m
)o(n+m)
o(n+m)
的 。
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
const
int jinzhi =
100003
;const
int maxn =
100007
;struct list
list[maxn]
; vector<
int>g[maxn]
;int n,m;
void
dfs(
int u)}}
intmain()
list[1]
.last=0;
list[0]
.next=1;
for(
int i=
1;i<=m;i++
)//for(int i=1;i<=n;i++)cout);
}
話說碼風變了是不是看著很奇怪 BZOJ 1299 LLH邀請賽 巧克力棒
演算法 博弈論 題解 這道題不是典型的sg函式題了。不把它當成遊戲看待,那麼這道題是在說n個石子堆,每次可以加入若干個或進行nim遊戲。我們當前先手,則考慮構造必敗態來獲勝。當前已加入的nim遊戲sg 0,則必須考慮加入石子堆,若加入m堆構造出sg 0,對方有兩種選擇 加入新的石子堆,則必須是sg ...
BZOJ 1299 LLH邀請賽 巧克力棒
如果沒有拿巧克力棒的操作的話 是乙個裸的nim遊戲 現在加入了這個操作 改變了異或的值 那麼我們只需要判斷先手的人是否可以從集合中取出乙個極大的異或值為0的子集即可 include include include include include include using namespace std...
bzoj1299 LLH邀請賽 巧克力棒 博弈
先從n根巧克力棒中取出m m 0 根,使得這m根巧克力棒的xor和為0 也就是把nim遊戲的必敗狀態留給對方 同時使得剩下的n m根巧克力棒無論怎麼取,xor和都不為0。實際上m就是巧克力棒的xor和為0的最長子序列 這麼一來,對手就面臨乙個必敗狀態的nim遊戲。如果他從n m根中取新的巧克力棒,實...