题解 | #D 与 S#

D 与 S

https://ac.nowcoder.com/acm/problem/229450

简单的博弈论,内测阶段由于疏忽大意慢了一拍太菜了痛失一血。

其实这个逃亡的过程很简单,考虑这么一个结构:

  • 如果 ab,aca\rightarrow b, a\rightarrow c,且 b,cb,c 都可以胜利。

那么先手无论剪哪条边,后手选另外一个边走过去就赢了。

再考虑一个结构:

  • 如果 aba\rightarrow b 能赢,但是 aa 到其他所有 c1,c2,,ckc_1,c_2,\cdots,c_{k} 都赢不了。

那先手直接剪了 bb 后手就输了。

考虑完了这两个性质之后,其实这道题咱们已经思考完了:

  • 2\ge2 个必胜点,可以共同作用于一个“未知胜负”的点,使之变成“必胜”点。

那么咱们直接从最开始的 kk 个必胜点开始,建立反向边,如果某个点被 2\ge2 个必胜点“直接达到”,那么他也变成必胜点即可。

int main(){
    int T = init();
    while (T--) {
        memset(vis, 0, sizeof(vis));
        memset(du, 0, sizeof(du));
        int n = init(), m = init(), k = init();
        for (int i = 1; i <= n; ++i)
            G[i].clear();
        q[0] = 0;
        for (int i = 1; i <= k; ++i)
            q[++q[0]] = init();
        for (int i = 1; i <= k; ++i)
            vis[q[i]] = 1;
        for (int i = 1; i <= m; ++i) {
            int u = init(), v = init();
            G[u].push_back(v), G[v].push_back(u);
        }
        int nxt = 1;
        while (nxt <= q[0]) {
            int u = q[nxt++];
            for (std::vector<int>::iterator it = G[u].begin(); 
                it != G[u].end(); ++it) { // 反向遍历
                int v = *it;
                ++du[v]; // 度数 + 1
                if (du[v] >= 2 && !vis[v]) { // 如果度数 >= 2,并且它还是未知的,那么就是必胜点
                    vis[v] = 1;
                    q[++q[0]] = v; // 加入队列,继续影响后面的点
                }
            }
        }
        if (vis[1]) puts("yes");
        else puts("no");
    }
}
全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
正在热议
更多
# 大厂实习和小厂实习最大的区别是什么? #
2378次浏览 20人参与
# 参加完秋招的机械人,还参加春招吗? #
119942次浏览 760人参与
# 厦门银行科技岗值不值得投 #
9861次浏览 249人参与
# 牛友の3月总结 #
1839次浏览 26人参与
# 这些公司卡简历很严格 #
95209次浏览 417人参与
# 面试被问到不会的问题,你怎么应对? #
688次浏览 8人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
18791次浏览 302人参与
# 拼多多工作体验 #
52676次浏览 342人参与
# 研究所VS国企,该如何选 #
259065次浏览 2013人参与
# 通信硬件知识分享 #
48135次浏览 538人参与
# 找AI工作可以去哪些公司? #
17071次浏览 750人参与
# 从事AI岗需要掌握哪些技术栈? #
14917次浏览 845人参与
# 你做过最难的笔试是哪家公司 #
47440次浏览 757人参与
# 实习最想跑路的瞬间 #
130955次浏览 740人参与
# 金三银四,你的春招进行到哪个阶段了? #
24576次浏览 297人参与
# 说说你知道的学历厂 #
391006次浏览 1379人参与
# AI面会问哪些问题? #
36173次浏览 1075人参与
# 想给25届机械人的秋招建议 #
47739次浏览 251人参与
# 机械人避雷的岗位/公司 #
62887次浏览 395人参与
# 大厂无回复,继续等待还是奔赴小厂 #
343361次浏览 1988人参与
# 滴!实习打卡 #
814707次浏览 6858人参与
# 我心目中的理想工作是这样的 #
100873次浏览 907人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务