首页 > 其他分享 >HDU 3590 PP and QQ

HDU 3590 PP and QQ

时间:2024-08-16 21:05:00浏览次数:4  
标签:QQ HDU 3590 异或 必胜 flag sg

题目链接:HDU 3590【PP and QQ】



思路

       树上删边问题,套个反尼姆博弈。
       反尼姆博弈是取走最后一个石子的人输掉游戏,所以需要特判一些特殊情况。
       1. 有堆的石子个数都是1,所以堆数为奇数时,先手必败,否则先手必胜
       2. 所有堆中存在石子数为非1的堆时,若所有堆的异或和为0则,先手必败,否则先手必胜。
       克朗原理:对于树上的某一个点,它的分支可以转换为这个点为根的一根竹子,这个竹子的长度就是它各个分支的边的数量的异或和,异或和为0时,先手必胜,异或和为非0时,后手必胜。


代码

/*
n棵树的树上删边
*/
int sg[N], n, flag, t;
vector<int> edge[N];

void init() {
  memset(sg, 0, sizeof sg);
  for (int i = 0; i <= n; i++) {
    edge[i].clear();
  }
}

void dfsSG(int x, int fa) {
  sg[x] = 0;
  for (auto i : edge[x]) {
    if (i == fa)
      continue;
    dfsSG(i, x);
    sg[x] ^= (sg[i] + 1);
  }
}

void solve() {
  int res = 0;
  flag = 0;
  while (t--) {
    n = read();
    init();
    for (int i = 1; i < n; i++) {
      int u = read(), v = read();
      edge[u].push_back(v);
      edge[v].push_back(u);
    }
    dfsSG(1, 0);
    if (sg[1] > 1)
      flag = 1;

    res ^= sg[1];
  }
  if ((res == 0 && flag == 0) || (res && flag)) {
    cout << "PP" << endl;
  } else {
    cout << "QQ" << endl;
  }
}

int main() {
  while (~scanf("%d", &t)) {
    solve();
  }
  return 0;
}

标签:QQ,HDU,3590,异或,必胜,flag,sg
From: https://www.cnblogs.com/againss/p/18363623

相关文章

  • 腾讯云主机找回功能|QQ群臣成员提取反查溯源成功案例
    QQ群成员提取手机号溯源本文章只针对腾讯云主机找回功能并着重介绍两个程序,其余溯源方法一概不论。1、态感捕获RTip通过态势感知等设备捕获到一枚攻击的IP地址,经过查询,发现是腾讯云主机的IP地址,随即对绑定域名以及历史whois信息进行反查,并未发现有用信息。既然是腾讯云主......
  • HDU 2873 Bomb Game
    题目链接:HDU2873【BombGame】思路    数据范围较小,直接暴力求所有状态的SG值,然后将棋盘上所有炸弹的对应位置的SG值异或起来就可以得到当前局面的结果。对于相同位置的上有两个炸弹会自动爆炸,本来他们的SG值的异或和就为0,所以可以不用管。代码intn,m,vis[N*N......
  • HDU 3980 Paint Chain
    题目链接:HDU3980【PaintChain】思路    第一次操作,无论从哪个珠子开始染色,都会得到相同的长度为n-m的链,然后就是在这条链中取一段长度为m的珠子染色,当这一段珠子在链条中间的时候,就会把链条分成两段,就是一个简单的两段连续珠子的长度的sg值异或一下,求出sg[n-m]的......
  • HDU 2999 Stone Game, Why are you always there?
    题目链接:HDU2999【StoneGame,Whyareyoualwaysthere?】思路    由于只能取连续的一段石子,当取出的石子是这段石子的中间一部分时就相当于将一段石子分成两段石子,简单异或一下求SG值就行了代码intsg[N],vis[N],a[N];intn,m,k;voidgetsg(){memset......
  • Python - 详情介绍Zmail发送邮件(支持普通&企业邮箱,163、QQ、gmail...)
    Python-详情介绍Zmail发送邮件为了满足在python项目中收发邮件给其他人,可利用自己的邮箱账号结合Zmail来完成。Zmail使得在python3中发送和接受邮件变得更简单。你不需要手动添加服务器地址、端口以及适合的协议。Zmail仅支持python3,不需要任何外部依赖.不支持python2......
  • HDU-ACM 2024 Day3
    T1004游戏(HDU7460)注意到对于两个人,他们\(t\)轮后能力值相同的概率只与他们初始时的能力差有关,所以我们先\(\text{FFT}\)求出\(|a_i-a_j|=k\)的\((i,j)\)对数。构造多项式\(F(x)=(p_1x^2+p_2+p_3x)\),其中\(p_1,p_2,p_3\),分别表示在一轮中两个人相对......
  • hdu7462-字符串【SAM,二分】
    正题题目链接:https://acm.hdu.edu.cn/showproblem.php?pid=7462题目大意你有一个由\(a,b\)组成的字符串\(s\)。有\(m\)个操作:询问有多少个本质不同的串\(t\)使得\(s[l,r]\)是\(t\)的子串且两个串在\(s\)中的出现次数相同。询问有多少个本质不同的串\(t\)......
  • Linux Centos通过mail向QQ邮箱发邮件
    1.配置1.1如果是配置全局文件,则编辑/etc/mail.rc1.2如果是配置当前用户,则编辑~/.mailrc2.配置文件内容#这里填入smtp地址,这里的xxx为qq或者163等,如果用的云服务器,安全组策略要开放465/25端口,入站和出站都要开放该端口setsmtp=smtp.qq.com:587#设置发信人邮箱和昵称(......
  • [题解 hduoj-7522] 2024HDU 暑假多校7 - cats 的最小生成树
    原题链接题意有一个有重边的无向图,每次找到它的最小生成树,并删除生成树的边,直到不存在最小生成树,问被每条边在第几次被删除.思路考虑用类似Kruskal算法,但是是遍历一遍所有边,同时处理出来所有的生成树.具体这样做:如Kruskal一样,把所有边按边权排序,......
  • 免费qq号码估价的工具和软件
    目前有多种qq号码估价的工具和软件。例如,晒号网的QQ估价器可以根据QQ号码等级、QQ号码资深度、QQ号码年限、活跃时间等进行准确的QQ号码估价。此外,还有其他一些相关的估价软件和平台,如QQ号码估价2.0全新玩法,利用快手/抖音直播QQ号码价值估算,半小时最高收益10......