题意是给个图,然后求生成树的最大度数的节点的度数最大化的值。
思路:生成树里最大度数的节点的度数取最大,所对应的那个节点必定是原图里度最大的节点,然后由该点向四周bfs,直至所有点都在一个树里。
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
vector<int>g[maxn];
bool vis[maxn];
int n,m,deg[maxn];
void bfs(int st)
{
vis[st]=1;
queue<int>q;
while(!q.empty()) q.pop();
q.push(st);
while(!q.empty())
{
int now=q.front();q.pop();
int sz=g[now].size();
for(int i=0;i<sz;i++)
{
int v=g[now][i];
if(!vis[v])
vis[v]=1,printf("%d %d
",now,v),q.push(v);
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
deg[u]++;deg[v]++;
g[u].push_back(v);
g[v].push_back(u);
}
int nod,maxx=-1;
for(int i=1;i<=n;i++)
{
if(deg[i]>maxx)
maxx=deg[i],nod=i;
}
bfs(nod);
return 0;