美团编程 无向图 全1

题目一:图的遍历

说给了一张包含个N个点N-1条边的无向连通图,节点从1到N编号,每条边长度均为1,设你从1号节点出发并打算遍历所有节点,那么总路程至少是多少?

输入:第一行包含一个整数N,接下来N-1行,每行包括两个整数x,y表示x与y之间有一条边
输出:总路程最小和

样例:
4
1 2
1 3
3 4

输出:4

思路:一共n-1条边,每个边走两次,一共2*(n-1) ,有边不走两次,也就是不回头,减去一次,当走的路径为最大深度deep时候,总路程最小为2*(n-1)-deep

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
vector<int> vec[N];
int ans;
void dfs(int x, int old, int w) {
    for(int i=0;i<vec[x].size();i++){
        if(vec[x][i]==old){
            continue;
        }
        dfs(vec[x][i],x,w+1);
    }
    ans = max(ans, w);
}
int main() {
    int n;
    scanf("%d", &n);
    for(int i = 1; i < n; ++ i) {
        int x, y;
        scanf("%d%d", &x, &y);
        vec[x].push_back(y);
        vec[y].push_back(x);
    }
    ans = 0;
    dfs(1, -1, 0);
    printf("%d\n", (n-1)*2-ans);
    return 0;
}

题目二:最长全1串

给你一个01串,定义答案=该串中最长的连续1的长度,现在有k次机会将某个0改为1,现在问最大可能答案

输入:第一行 n k

第二行 n个数

样例:

输入:
10 2
1 0 0 1 0 1 0 1 0 1
输出:

5

思路:遍历这n个数,将为0 的 push进vec,只考虑vec

初始最长maxlen为vec[k]-1,vec[k]表示第k+1个0所在位置,vec[k]-1就是初始最大长度,vec[i]-vec[i-k-1]-1 就是将i-k-1到i之间0变为1的长度

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
vector<int> vec;
int main() {
    int n,k,x;
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        cin>>x;
        if(x==0) vec.push_back(i);
    }
    int maxlen=vec[k]-1;
    for(int i=k+1;i<=vec.size();i++){
        int tmp=vec[i]-vec[i-k-1]-1;
        maxlen=max(maxlen,tmp);
    }  cout<<maxlen<<endl;  return 0;
}

#美团##笔试题目#
全部评论
给大佬递茶
2 回复 分享
发布于 2018-09-07 11:06
牛牛🐮
点赞 回复 分享
发布于 2023-07-14 13:23 安徽
美团再见,大佬您好!
点赞 回复 分享
发布于 2018-09-09 16:35
膜拜巨佬
点赞 回复 分享
发布于 2018-09-07 22:28
学习了
点赞 回复 分享
发布于 2018-09-07 17:28
这思路牛逼
点赞 回复 分享
发布于 2018-09-07 16:29
收藏了,感谢!
点赞 回复 分享
发布于 2018-09-07 15:49
妙啊,大佬牛逼
点赞 回复 分享
发布于 2018-09-07 10:37
题一输入时每条边只存一次(若x>y时需要交换)可以省去old判断
点赞 回复 分享
发布于 2018-09-07 01:12
被有环给卡住了,原来是没环的,尴尬
点赞 回复 分享
发布于 2018-09-07 00:53
牛逼
点赞 回复 分享
发布于 2018-09-07 00:43
我也想到了,但是没注意是N-1条边所以不会有环,deep的话应该是从分叉开始计算不一定是1节点,再见美团
点赞 回复 分享
发布于 2018-09-07 00:29
真的6,感觉死磕dfs好难写出来,你这思路很6啊
点赞 回复 分享
发布于 2018-09-07 00:23
思路厉害了
点赞 回复 分享
发布于 2018-09-07 00:14

相关推荐

大佬们,在大厂实习的都是几百一天???
爱睡觉的冰箱哥:实习工资这个不都是公开的吗,a不了,字节400,快手350,有些有房补餐补这样
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-20 14:01
点赞 评论 收藏
分享
评论
14
94
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务