Gym - 100886B 2015-2016 Petrozavodsk Winter Training Camp, Saratov SU Contest B - Game on Bipartite
程序员文章站
2022-05-22 10:49:55
...
题目有很强的结论,看代码应该可以知道结论是什么
但是想了两天还是没有想到一个严格的证明
大概思路:
首先边的奇偶影响答案(走过去优就继续拓展,不优就走回来)
转化为01问题
考虑消元的过程中,对面的一个点会发生什么
如果这个点可以成为主元,说明从这个点出发一定会有奇数长度的路径(即便是双方交替进行)
↑感性认识一下感觉非常有道理,然而并不会证(sad
然后基于这个结论就可以做了,把其他所有点的出边情况送进去消元,消完后再把起点也丢进去判断是否会被消掉
因为这是公平博弈,所以可以用相同方法判断对方在某个点的胜负,故可以产生方案
UPD:
似乎是后手只要不断把先手往基上拉,先手就会输,所以要看起点能不能被消掉
先手不往基上走为啥会赢我没搞清楚,感觉与行列消元得到的主元相同有联系
Thx to yjq
#include<stdio.h>
#include<cstring>
#include<cstdlib>
#define N 51
typedef long long ll;
int n,m,e,v,edg[N][N],d1[N],d2[N];
ll row[N],col[N],pivot[N];
inline bool add(ll mask)
{
for (int i=1;i<N;i++) if (mask>>i&1)
{
if (pivot[i]) mask^=pivot[i];
else {pivot[i]=mask;return 1;}
}
return 0;
}
inline void go(int t)
{
printf("%d\n",t);
fflush(stdout);
--edg[v][t];
--d1[v];
row[v]^=1LL<<t;
col[t]^=1LL<<v;
if (--d2[t]==0)
{
puts("Player 1 wins");
exit(0);
}
scanf("%d",&v);
--edg[v][t];
--d1[v],--d2[t];
row[v]^=1LL<<t;
col[t]^=1LL<<v;
}
inline bool check(int y)
{
memset(pivot,0,sizeof(pivot));
for (int i=1;i<=m;i++) if (i!=y) add(col[i]);
return !add(col[y]^(1LL<<v));
}
inline void win()
{
while (1)
{
for (int i=1;i<=m;i++) if (edg[v][i] && check(i)) {go(i);break;}
}
}
inline void lost()
{
while (1)
{
bool flag=1;
for (int i=1;i<=m;i++) if (edg[v][i]) go(i),flag=0;
if (flag) {puts("Player 2 wins");exit(0);}
continue;
}
}
int main()
{
scanf("%d%d%d%d",&n,&m,&e,&v);
for (int u,v;e--;)
{
scanf("%d%d",&u,&v);
++d1[u],++d2[v];
++edg[u][v];
row[u]^=1LL<<v;
col[v]^=1LL<<u;
}
for (int i=1;i<=n;i++) if (i!=v) add(row[i]);
if (add(row[v])) win();
else lost();
}
上一篇: codeforces 825B(DFS)
下一篇: 迪杰特斯拉算法伪码
推荐阅读
-
2015-2016 Petrozavodsk Winter Training Camp, SPb SU + SPb AU Contest Greedy Game
-
[Gym] - 100886K 2015-2016 Petrozavodsk Winter Training Camp, Saratov SU Contest K - Toll Roads
-
Gym - 100886I 2015-2016 Petrozavodsk Winter Training Camp, Saratov SU Contest I - Archaeological Res
-
Gym - 100886B 2015-2016 Petrozavodsk Winter Training Camp, Saratov SU Contest B - Game on Bipartite
-
2015-2016 Petrozavodsk Winter Training Camp, Moscow SU Trinity Contest(Gym 100962)
-
Gym - 100886F 2015-2016 Petrozavodsk Winter Training Camp, Saratov SU Contest F - Empty Vessels
-
题解:2015-2016 Petrozavodsk Winter Training Camp, Saratov SU Contest