美团2023.4.8笔试

只整了两道:

1.第一题换座位

遍历座位

也就是统计右下方和左上方不同的数目,遇到边界取模。

代码没记录,忘。

2.给出一个树,选定树中一条边,求经过这条边的最长路径

输入:

第一行n,表示有n个节点。

第二行n-1个,表示p2,..pn,其中i与pi有连线

第三行a1,a2,表示这条边的两个节点

输出:

路径的长度

思路:

用vector数组建图,然后删除图中一条边,选定两个路径的两个端点分别dfs 记录最长路径len,相加得到答案

#include <bits/stdc++.h>
using namespace std;
int n,m,a;
int max1=-1;
void dfs(vector<int> tree[],int fat[],int i,int len){
    if(max1<len)max1=len;
    fat[i]=1;
    for(int no:tree[i]){
        if(fat[no]==0){
            dfs(tree,fat,no,len+1);
        }
    }
}
int main() {
    cin >> n;
    vector<int> tree[n + 5];
    int fat1[n+5];
    int vivid[n+5];
    for(int i=2;i<=n;i++){
        int no;
        cin >> no;
        tree[i].push_back(no);
        tree[no].push_back(i);
        fat1[i]=0;
    }
    fat1[1]=0;
    int u,v;
    cin >> u >> v;

    for(int i=0;i<tree[u].size();i++){
        if(tree[u][i]==v)tree[u].erase(tree[u].begin()+i);
    }

    for(int i=0;i<tree[v].size();i++){
        if(tree[v][i]==u)tree[v].erase(tree[v].begin()+i);
    }
    int res=0;

    dfs(tree,fat1,u,0);
    res+=max1+1;

    max1=0;
    dfs(tree,fat1,u,0);
    res+=max1;
    cout << res <<endl;
}
#美团信息集散地##我的实习求职记录##美团4.8笔试#
全部评论
vector<int> tree[n + 5]; 这个地方我把n+5 换成了题目给的节点最大值 最后程序空间跑到了14140000MB 谁懂啊 家人们 被最大值坑死了</int>
2 回复 分享
发布于 2023-04-09 17:48 湖北
大佬A了多少啊
点赞 回复 分享
发布于 2023-04-08 23:28 安徽
请问一下为啥初始为n+5呢?
点赞 回复 分享
发布于 2023-04-09 22:04 辽宁
楼主什么岗位
点赞 回复 分享
发布于 2023-04-11 00:00 山西
编程题的时候可以先在本地的IDE上写吗
点赞 回复 分享
发布于 2023-04-14 21:26 湖北

相关推荐

vegetable_more_exercise:1-1.5万,没错啊,最少是1人民币,在区间内
点赞 评论 收藏
分享
牛客5655:其他公司的面试(事)吗
点赞 评论 收藏
分享
2 2 评论
分享
牛客网
牛客企业服务