引爆炸弹-蓝桥杯模拟赛

题目:

在一个 n×m 的方格地图上,某些方格上放置着炸弹。手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸弹又能引爆其他炸弹,这样连锁下去。

引爆炸弹-蓝桥杯模拟赛_第1张图片

现在为了引爆地图上的所有炸弹,需要手动引爆其中一些炸弹,为了把危险程度降到最低,请算出最少手动引爆多少个炸弹可以把地图上的所有炸弹引爆。

引爆炸弹-蓝桥杯模拟赛_第2张图片


分析:这道题不会做,知道看到一个博客提到了该题用并查集做,去查了并查集,博客讲的特别好,一下子就懂了,链接如下 http://blog.csdn.net/dellaserss/article/details/7724401

说明:我用的cin,题目说的数据量大要用scanf,我没有找到评测系统提交就懒得改了。当遇到新的炸弹A作为boss时,要把当前炸弹B的最大boss并列到A的最大boss上才行!

#include 
#include 
using namespace std;
struct node
{
    int col;
    int row;
} fg[1001];
int pre[1002];
int cnt=0;
int findpre(int n)//寻找该炸弹的最大boss
{
    while(pre[n]!=n)
    {
        n=pre[n];
    }
    return n;
}
void join(int n)
{
    int c=fg[n].col,r=fg[n].row;
    int father=findpre(n);
    for(int i=0; i>n>>m;
    for(int i=0; i>str;
        for(int j=0; j s;
    for(int i=0; i


你可能感兴趣的:(蓝桥杯)