打卡信奥刷题(2019)用C++实现信奥 P10942 GF和猫咪的玩具

P10942 GF和猫咪的玩具

题目描述

GF 同学和猫咪得到了一个特别的玩具,这个玩具由 nnn 个金属环(编号为 1∼n1 \sim n1n)和 mmm 条绳索组成,每条绳索连接两个不同的金属环,并且长度相同。GF 左手拿起金属环 LLL,猫咪右手(或者说:爪)拿起金属环 R (L≠R)R\ (L \ne R)R (L=R),然后尽量的向两边拉,他希望选择合适的 LLLRRR,使得被拉紧的绳索尽量的多。

注:如果像样例那样 1→2→4→3→5→6→11 \to 2 \to 4 \to 3 \to 5 \to 6 \to 11243561 构成了一个环,我们认为拉 111333 时只能拉紧一边(1→2→4→31 \to 2 \to 4 \to 312433→5→6→13 \to 5 \to 6 \to 13561)而不算全部拉紧。通俗地说,也就是当两个环之间有几个绳索数相等的连接方法时,只算其中一条连接方法拉紧,不算全部拉紧。

输入格式

第一行包含两个正整数 n,mn,mn,mn≤100n \le 100n100);

接下来的 mmm 行包含两个正整数 a,ba,ba,b,表示有一条绳索连接了 aaabbb 的绳索。

输出格式

仅包含一个整数,表示最多能拉紧的绳索数。

输入输出样例 #1

输入 #1

6 6
1 2
1 6
2 4
6 5
4 3
5 3

输出 #1

3

C++实现

#include<bits/stdc++.h>
#define qwq for(int i=1;i<=n;i++){bj[i]=0;}
struct Node{
	int p,w;
};
using namespace std;
int ans=0;
bool bj[101];
vector<int>a[101];
queue<Node>q;
void bfs(int p,int w){
	ans=max(ans,w);//更新答案
	bj[p]=1;
	for(auto it:a[p]){
		if(!bj[it]){
			q.push({it,w+1});
			bj[it]=1;
		}
	}
}
signed main(){
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		int u,v;
		scanf("%d%d",&u,&v);
		a[u].push_back(v);
		a[v].push_back(u);//存无向图
	}
	for(int i=1;i<=n;i++){
		q.push({i,0});
		while(!q.empty()){
			bfs(q.front().p,q.front().w);//bfs
			q.pop();
		}
		qwq;//记得清空标记数组
	}
	printf("%d",ans);
	return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值