12
返回列表 发新帖
跳转到指定楼层
上一主题 下一主题
收起左侧

GG电面GG,感觉有点奇怪

🔗
ziwei1992 2019-2-7 13:06:00 | 只看该作者
全局:
同问follow up什么思路?我的想法是,如果a和b在同一个图里,和之前做法一样,如果在不同图里,b的点数是这个图中的节点数,然后取这两种情况的max。不知楼主是什么做的?
回复

使用道具 举报

🔗
qqaas 2019-2-7 16:11:35 | 只看该作者
全局:
写了一个模拟答案,思路是按照二楼大神取 拥有最大儿子数目的子树 请各位看看有啥问题不
class GraphNode {
public:
    vector<GraphNode*> neighbors;
    int val;
    GraphNode(int val) {
        this->val = val;
    }  
};

GraphNode* chooseMaxNode(vector<GraphNode*> allNodes, GraphNode* a) {
    GraphNode* b;
    int maxChildren = 0;
    for (GraphNode* node : a->neighbors) {
        int curChildren = getChildrenNumber(node);
        if (curChildren > maxChildren) {
            maxChildren = curChildren;
            b = node;
        }
    }
    return b;
}

int getChildrenNumber(GraphNode* root) {
    if (!root) {
        return 0;
    }

    int res = 0;
    for (GraphNode* child : root->neighbors) {
        res += getChildrenNumber(child);
    }
    return res + 1;
}
回复

使用道具 举报

🔗
 楼主| 极为漫长的一天 2019-2-7 20:18:22 | 只看该作者
全局:
ziwei1992 发表于 2019-2-7 13:06
同问follow up什么思路?我的想法是,如果a和b在同一个图里,和之前做法一样,如果在不同图里,b的点数是这 ...

对我就是这么做的
回复

使用道具 举报

🔗
 楼主| 极为漫长的一天 2019-2-7 20:19:18 | 只看该作者
全局:
mwen2 发表于 2019-2-7 04:52
求问一下楼主能share一下代码嘛?多谢多谢~

不好意思没有copy代码
回复

使用道具 举报

全局:
ziwei1992 发表于 2019/02/07 13:06:00
同问follow up什么思路?我的想法是,如果a和b在同一个图里,和之前做法一样,如果在不同图里,b的点数是这个图中的节点数,然后取这两种情况的max。不知楼主是什么做的?

如果在不同图里,b的点数不应该是所有图中节点数最多的那个吗?能再详细说下你的思路吗?
回复

使用道具 举报

🔗
ziwei1992 2019-2-8 00:41:13 | 只看该作者
全局:
naihe1990 发表于 2019-2-7 23:47
如果在不同图里,b的点数不应该是所有图中节点数最多的那个吗?能再详细说下你的思路吗?

嗯嗯就是这个意思
回复

使用道具 举报

全局:
这题理解了题义了就很简单吧。因为a和b都只能走自己走过的相邻点,这样最后走下来ab占领的点都是一个connected component。所以b就选a的初始点的一个相邻点,并且以这个相邻点为root的子节点(仅限那个分支)总数目最多。这样a就没法干涉后面轮b选点了。不过这好像有个bug,如果a那边点已经选完了,游戏是不是算结束?这样b也无法选点了。如果是这样的话,那么情况有些复杂。follow up意义不大,就是把其它几个单独分开的connected component也算一下大小,取一下最大值。
回复

使用道具 举报

🔗
tangvictor 2019-2-11 00:42:52 | 只看该作者
全局:
按照你的描述,可以继续占领之前占领的某点相邻,也就是说如果a选完一支还能继续选另一支?那即使b选了最多子孩子的一支开头,也不一定敌的过a把其他所有支占领了。所以是有什么终止条件吗?
回复

使用道具 举报

🔗
liuziqi01 2019-4-25 16:48:34 | 只看该作者
全局:
如果不能重复占领的话,需要考虑A 的subtree之外的节点数目之和。
如果A subtree之外的节点数量比A subtree多的话,直接可以占领A的父节点。 因为在不能重复占领的情况下,这样直接就赢了。(A只能在自己的subtree挣扎)
如果少的话,就选取A子节点中最大的subtree(节点数目最多)

计算节点数量就是个基本功了,BFS, DFS都没问题吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表