Andrew Stankevich Contest 38 , J-Jackpot

http://codeforces.com/gym/100490 

J-Jackpot


给你一个图,两个人轮流按节点下标从小到大顺序进行黑白染色,要求任意时刻有边相连的节点之间颜色必须不同,问谁赢?


看上去是个博弈,实际上是花式并查集

写的很开心。


#pragma comment(linker, "/STACK:1024000000,1024000000")
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define Msn(x,y) (memset((x),0,sizeof((x[0]))*(y+1)))
#define msn(x) (memset((x),0,sizeof((x))))
#define msx(x,y) (memset((x),0x7f,sizeof((x[0]))*(y+3)))
#define fuck(x) cerr << #x << " <- " << x << endl
#define acer cout<<"sb"< g[maxn];
int n,m;
typedef pair pii;
typedef pair piii;
pair fa[maxn];
int col[maxn];
pairanc(int a)
{
	if(fa[a].fa==a)return fa[a];
	pii my_fa1=fa[a];//我现在的爸爸
	pii my_fa2=anc(fa[a].fa);//我爸爸的爸爸
    fa[a].fa=my_fa2.fa;//我的终极祖先等于我祖先的终极祖先
    fa[a].related=my_fa1.related*my_fa2.related;
    //我和我祖先的祖先的关系=我和我祖先的关系*我祖先和我祖先的祖先的关系
    return fa[a];
}
//1 爸爸是谁
//2 和爸爸的关系
void uni(int aa,int bb,int eqcolor)//连接  b jiao a baba
{
    pii a=anc(aa);//aa 的爸爸 和爸爸的关系
    pii b=anc(bb);//bb 的爸爸 和爸爸的关系
    fa[b.fa].fa=a.fa;
    fa[b.fa].related=b.related*eqcolor*a.related;
}
void ini1()//并查集初始化
{
	for(int i=1;i<=n;i++)
	{
		fa[i].fa=i;
		fa[i].related=1;
	}
}
mapmp;
int solve()
{
    int v;
    for(int u=1;u<=n;u++)
    {
        if(g[u].size()==0)continue;
        vectorp;
        for(int i=0;in)printf("Tie\n");
    else if(ans%2==0)printf("Alice %d\n",ans);
    else printf("Bob %d\n",ans);
    return 0;
}


你可能感兴趣的:(数据结构,codeforces,图论)