先给UOJ打个广告。Orz Vfeaking~~~
题解:
两种,都是建立在一个前提下的,
就是一个点(或者点集),如果它的出边都问完了之前就可以知道它是否连通了
那么显然剩下的出边就没有必要问了。
然后这样这些边留到最后问就可以保证小B必胜了。
所以显然小A不能让这种情况发生。
两种方法:
1、 O(n^2)
维护并查集以及两点集之间的度数,
然后最后一个度数的时候再输出yes并且将两个点集合并。
合并:将被父亲的那个点集到其它点集的度数继承到被儿子的那个点。
2. O(n)
一个点到其它点中最后一个点连边时才输出yes
也就是以下代码。
代码:
#include "game.h" int cnt[1600]; void initialize(int n){} int hasEdge(int u,int v) { if(u<v)u=v; return ++cnt[u]==u; // 不到最后一刻不告诉你 //它跟其它(所有点)是否连同 }
原文地址:http://blog.csdn.net/vmurder/article/details/43699415