sixdeg c++

题目描述

贝茜知道这样一个游戏,电影明星和电影明星通过同一部电影联系再一起。

专横的培根女士是一只猪,她想证明牛和猪一样好。

贝茜从来没看过电影,传说中说她和其它的奶牛在月圆之夜是通过彼此的叫声联系的。

一种贝茜和其他奶牛联系的方式是通过一连串的中间奶牛传递的,所以当第一头牛和贝茜一起叫,第二头牛和第一头牛一起叫,第三头牛和第二头牛一起叫,......,贝茜就能依次联系到其中的每一头奶牛。

将有多种顺序把贝茜与其他奶牛联系,每头牛都至少有一种方式与贝茜联系。

联系的长度是指传递过程中涉及的奶牛的数目(不包括贝茜),任何一头奶牛的培根索引是指从贝茜到该奶牛的最小的长度。

最小的凯文培根索引是1(当贝茜能够直接与该奶牛联系时)。

约翰有C头牛,编号从1..C(1<=C<=1000)。

自然贝茜是1号,共有P(1<=P<=10,000)组奶牛联系。

找到从贝茜开始的最大的培根索引。

输入

第1行:C,P

第2..P+1行:每行两头牛,它们相互之间有联系,输入数据没有先后顺序之分。

输出

最大的培根索引

样例

输入

6 7

1 2

2 3

2 4

3 4

3 5

4 5

6 5

输出  

4

AC代码:

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

int main() {
    int C, P;
    cin >> C >> P;

    vector<vector<int> > graph(C + 1); 

    for (int i = 0; i < P; i++) {
        int cow1, cow2;
        cin >> cow1 >> cow2;
        graph[cow1].push_back(cow2);
        graph[cow2].push_back(cow1);
    }

    vector<int> dist(C + 1, -1); 
    queue<int> q;
    q.push(1);
    dist[1] = 0; 

    while (!q.empty()) {
        int curr = q.front();
        q.pop();

        for (int neighbor : graph[curr]) {
            if (dist[neighbor] == -1) {
                dist[neighbor] = dist[curr] + 1;
                q.push(neighbor);
            }
        }
    }

    int maxBaconIndex = 0;
    for (int i = 1; i <= C; i++) {
        maxBaconIndex = max(maxBaconIndex, dist[i]);
    }

    cout << maxBaconIndex << endl;

    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值