Counting Islands II_太阁竞赛C

题目3 : Counting Islands II
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
Country H is going to carry out a huge artificial islands project. The project region is divided into a 1000x1000 grid. The whole project will last for N weeks. Each week one unit area of sea will be filled with land.


As a result, new islands (an island consists of all connected land in 4 -- up, down, left and right -- directions) emerges in this region. Suppose the coordinates of the filled units are (0, 0), (1, 1), (1, 0). Then after the first week there is one island:  


#...
....
....
....
After the second week there are two islands:  


#...
.#..
....
....
After the three week the two previous islands are connected by the newly filled land and thus merge into one bigger island:


#...
##..
....
....
Your task is track the number of islands after each week's land filling.  


输入
The first line contains an integer N denoting the number of weeks. (1 ≤ N ≤ 100000)  


Each of the following N lines contains two integer x and y denoting the coordinates of the filled area.  (0 ≤ x, y < 1000)


输出
For each week output the number of islands after that week's land filling.


样例输入
3  
0 0   
1 1   
1 0   
样例输出
1  
2  

1  


【我的程序】

#include <iostream>
using namespace std;

long int n, num=0, a[1000000]={0}, aSize[1000000]={0};
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};

long int findID(long int x)
{
    while (a[x]!=x) x=a[x]=a[a[x]];
    return x;
}

void unionID(long int x, long int y)
{
    x=findID(x); y=findID(y);
    if (x==y) return;
    if (aSize[x]<aSize[y]) {a[x]=y; aSize[y]+=aSize[x];}
    else {a[y]=x; aSize[x]+=aSize[y];}
    num--;
}

int check(int x, int y)
{
    if (x>=0 && x<1000 && y>=0 && y<1000 && aSize[x*1000+y]>0) return 1; else return 0;
}

int main()
{
    long int i,p,q;
    cin>>n;

    for (i=0;i<n;i++)
    {
        cin>>p >>q;
        a[p*1000+q]=p*1000+q;
        aSize[p*1000+q]=1;
        num++;

        for (int j=0;j<4;j++)
            if (check(p+dx[j],q+dy[j])) unionID(p*1000+q,(p+dx[j])*1000+q+dy[j]);

        cout<<num <<endl;
    }

    return 0;
}


  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论
<p style="font-size:14px;background-color:#ffffff;color:#333333;"> <span style="background-color:#ffffff;"><strong>注意:本课程已从Keras更新至TensorFlow2</strong></span> </p> <p style="font-size:14px;background-color:#ffffff;color:#333333;"> U-Net是一种基于深度学习的图像语义分割方法,尤其在医学图像分割中表现优异。 </p> <p style="font-size:14px;background-color:#ffffff;color:#333333;"> 本课程将手把手地教大家使用labelme图像标注工具制作自己的数据集,生成Mask图像,并使用U-Net训练自己的数据集,从而能开展自己的图像分割应用。 </p> <p style="font-size:14px;background-color:#ffffff;color:#333333;"> 本课程有三个项目实践: </p> <p style="font-size:14px;background-color:#ffffff;color:#333333;"> (1) Kaggle盐体识别比赛 :利用U-Net进行Kaggle盐体识别 </p> <p style="font-size:14px;background-color:#ffffff;color:#333333;"> (2) Pothole语义分割:对汽车行驶场景中的路坑进行标注和语义分割 </p> <p style="font-size:14px;background-color:#ffffff;color:#333333;"> (3) Kaggle细胞核分割比赛 :利用U-Net进行Kaggle细胞核分割 </p> <p style="font-size:14px;background-color:#ffffff;color:#333333;"> 本课程使用TensorFlow2版本的U-Net,在Ubuntu系统上用Jupyter Notebook做项目演示。 包括:数据集标注、数据集格式转换和Mask图像生成、编写U-Net程序文件、训练自己的数据集、测试训练出的网络模型、性能评估。<span style="font-family:微软雅黑, sans-serif;">项目代码也可在</span><span style="font-family:微软雅黑, sans-serif;">Windows</span><span style="font-family:微软雅黑, sans-serif;">上运行,课程提供</span><span style="font-family:微软雅黑, sans-serif;">Windows</span><span style="font-family:微软雅黑, sans-serif;">环境搭建方法。</span> </p> <p class="MsoNormal">   </p> <p style="font-size:14px;background-color:#ffffff;color:#333333;"> 本课程提供项目的数据集和Python程序代码。 </p> <p style="font-size:14px;background-color:#ffffff;color:#333333;"> <strong>相关课程:<span style="font-family:微软雅黑, sans-serif;color:#222226;">UNet</span><span style="font-family:微软雅黑, sans-serif;color:#222226;">(<span>PyTorch</span>)图像语义分割实战:训练自己的数据集 </span></strong><span style="font-family:'微软雅黑',sans-serif;color:#222226;background:white;">https://edu.csdn.net/course/detail/36198</span> </p> <p style="font-size:14px;background-color:#ffffff;color:#333333;"> <img src="https://img-bss.csdn.net/201907221510227991.jpg" alt="" /> </p>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

薄帷清风

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值