使用 bfs 解决连接组件问题时得到错误的答案
Got wrong answer while solving connected components question using bfs
你会得到一个有n个节点和m条边的图。 计算可以从图形中删除的最大边数,以便它正好包含 k 个连接的分量。
输入
第一行包含 n,m,k(按顺序(。
接下来的 m 行有 2 个数字,ui 和 vi,表明这些节点之间有一条边。 保证输入有效(没有多条边,没有循环(。
输出
可以从图形中删除的最大边数,以便它正好包含 k 个连接的组件。 如果图形最初有超过 k 个组件,则打印 -1 。
这是我的解决方案
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m,k;
cin>>n>>m>>k;
vector<vector<int>>graph(n+1);
while(m--)
{
int a,b;
cin>>a>>b;
graph[a].push_back(b);
graph[b].push_back(a);
}
vector<bool>visited(n+1,false);
queue<int>q;
int connected_components=0;
int span_edges=0;
for(int i=1;i<=n;i++)
{
if(visited[i] == false)
{
visited[i]=true;
q.push(i);
while(!q.empty())
{
int top=q.front();
q.pop();
for(auto k : graph[i])
{
if(!visited[k])
{
visited[k]=true;
span_edges++;
q.push(k);
}
}
}
}
connected_components++;
}
if(k<connected_components)
{
cout<<-1<<endl;;
}
else
{
cout<<((m-span_edges)+(k-connected_components))<<endl;
}
}
我得到了令人痛苦的答案,但我认为逻辑是正确的.我对图问题不太熟悉,虽然我已经阅读了所有的图概念,有人可以帮我吗?
谢谢。
这一行for(auto k : graph[i])
有一个错误 - 您需要迭代存储在top
变量中的顶点边缘,而不是i
。
相关文章:
- 递归求和任务的错误答案
- 为什么我在代码厨师的 CMPRSS 问题中得到 WA(错误答案)?
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- 寻找最小楼梯成本的动态规划问题的错误答案
- 为什么可变大小的数组会导致Codechef出现错误答案
- 如何修复此代码对几个测试用例的错误答案?
- 使用幂函数的计算给出了大数字的错误答案
- 快速排序算法,一些特定输入序列的错误答案和分段错误
- 二分法程序的错误答案(C++)
- 无法理解绘图程序中的错误答案
- C++ - 整数除以整数返回错误答案
- 布尔函数的错误答案
- SPOJ FASTFLOW上的错误答案
- 代码的错误答案是在Java Camel案件和C 下划线标识符之间转换的错误答案
- 200万以下所有素数的总和,线程给出错误答案
- 0-1整数背包返回错误答案(动态编程)
- UVa 在线判断 - 3n + 1 - 错误答案
- 提升C++原始算法错误答案
- 二项式系数函数C++错误答案 n>13
- 需要帮助以避免 SPOJ 上的"错误答案"