题意
给你n nn个点m mm条边的无向联通图,找出一棵生成树,使度最大的点的度最大。
1≤n,m≤105 1 \leq n,m \leq 10^51≤n,m≤10
5
解析:
度最大的点一定是原图度最大的点,记录度数,从度最大的点开始遍历生成树
ac:
#include<bits/stdc++.h>
#define MAXN 200005
using namespace std;
typedef pair <int, int> pii;
vector<int> mp[MAXN];
vector<pii> ans;
int in[MAXN]={0};
int vis[MAXN];
void bfs(int st)
{
vis[st]=1;
queue<int> que;
que.push(st);
while(!que.empty())
{
int u=que.front();
que.pop();
for(int i=0;i<mp[u].size();i++)
{
int v=mp[u][i];
if(vis[v]==0)
{
vis[v]=1;
que.push(v);
ans.push_back(pii(u,v));
}
}
}
}
int main()
{
int n,m,u,v;
scanf("%d%d",&n,&m);
memset(vis,0,sizeof(vis));
for(int i=1;i<=m;i++)
{
scanf("%d%d",&u,&v);
mp[u].push_back(v);
mp[v].push_back(u);
in[u]++;
in[v]++;
}
int maxs=0,st;
for(int i=1;i<=n;i++)
{
if(in[i]>maxs)
{
maxs=in[i];
st=i;
}
}
bfs(st);
for(int i=0;i<ans.size();i++)
printf("%d %d\n",ans[i].first,ans[i].second);
return 0;
}