更向未来(ikun)


私信TA

用户名:dotcpp0637958

访问量:2130

签 名:

数学才是出路!!!!

等  级
排  名 209
经  验 6461
参赛次数 0
文章发表 20
年  龄 99
在职情况 学生
学  校 66666
专  业

  自我简介:

我爱数学!!!

TA的其他文章

解题思路:

注意事项:

参考代码:

#include<iostream>

#include<cstdio>

#include<cstring>

using namespace std;

const int N=1e6+10;

int n, m;

int p[N];

int findth(int x)

{

if (x == p[x]) return x;

return p[x] = findth(p[x]);

}

 

int unionn(int x, int y)

{

int xx = findth(x);

int yy = findth(y);

if (xx != yy) {

p[yy] = xx;

return 1;

 

}

return 0;

}

int main()

{

scanf("%d %d", &n, &m);

for (int i = 1;i <= n * m;i++) p[i] = i;

int x1, y1, x2, y2;

while (scanf("%d %d %d %d", &x1, &y1, &x2, &y2) == 4) {

unionn((x1 - 1)*m + y1, (x2 - 1)*m + y2);

}

int sum = 0;

for (int i = 1;i <= m;i++) {

for (int j = 1;j < n;j++) {

if (unionn((j - 1)*m + i, j*m + i))

sum++;

}

}

 

for (int i = 1;i <= n;i++) {

for (int j = 1;j < m;j++) {

if (unionn((i - 1)*m + j, (i - 1)*m + j + 1) ) sum += 2;

}

}

printf("%d\n", sum);

return 0;

}


 

0.0分

1 人评分

  评论区

  • «
  • »