Noi2011 兔兔與蛋蛋

2022-05-26 19:06:08 字數 1151 閱讀 3786

題目

題解容易想到空格移動的路徑是不會自交的。

因為空格移動的路徑是黑白棋相間的

所以對棋盤進行黑白染色,建立二分圖

如果黑白兩格上的棋子不一樣則可以連邊

如果乙個人(a)將空格移入了乙個在最大匹配內的點,那麼它的對手(b)就可以沿著匹配邊前進(否則就相當於找到了一條新的匹配邊)

而a只能沿著非匹配邊前進,這樣到最後肯定是a無路可走(否則就相當於找到了一條新的匹配邊)

所以如果起始點不在最大匹配中那麼先手只能走非匹配邊,即必敗。

另外有可能起始點在最大匹配中,但後手可以沿著另乙個最大匹配前進。

所以必須保證起始點必須在最大匹配中。

具體的話可以給這個點打個刪除標記,看看它的原匹配點能不能找到另乙個物件。

形成**就是先跑一邊匈牙利

然後對於每個操作(把兔兔與蛋蛋的拆開),把經過的點全部刪除,看看空格是否必須在最大匹配中。

注意每執行完一次操作要清vis

黑白染色時相鄰行要錯開

#include #include #include #include #include using namespace std;

#define n 2000

#define pos(i,j) ((i-1)*m+j)

char map[50][50];

vectorvec[n];

int mx[4]=,my[4]=,p[n],vis[n],match[n],win[n],n,m;

bool disable[n];

void build(int i,int j)

}bool dfs(int id)

} for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) build(i,j);//建邊

hungary();

cin>>step;

for(int i=1;i<=step*2;i++)

int cnt=0;

for(int i=1;i

cout<

for(int i=1;i<=cnt;i++) printf("%d\n", ans[i]);

}

NOI2011 兔兔與蛋蛋遊戲

傳送門 直接博弈論dfs可以得到75分 然鵝我博弈論學的很pie include define ll long long define inf 10000 using namespace std intread while s 0 s 9 return x f char s 45 int lr ud...

NOI2011 洛谷 兔兔與蛋蛋遊戲

初見安 這裡是傳送門 洛谷p1971 noi2011 兔兔與蛋蛋遊戲 這種題啊 就只能多悟,才能看到了就知道怎麼做 bushi。看題目的操作 每次交替移動黑白棋子。然後就可以想到二分圖了 什麼鬼。空白格仔從初始到終點走的路徑上的格仔都是與之交換過的,並且黑白相間,該路徑與以前走過的路徑不可能有交點。...

bzoj2437 Noi2011 兔兔與蛋蛋

先把棋盤黑白染色,那麼對於o,當且僅當它所處的格仔顏色和空格不一樣才會移動,x相似,那麼對於這些o x,最多也就是被移動1次而已。同時每次空格每次移動所處顏色都是在改變 那麼就是二分圖博弈啊。而走一步相當於刪除乙個點,然後每次就讓被刪的那個點去找增廣路,找到了就必敗,反之必勝。蛋蛋走完必勝,兔兔再走...