zoukankan      html  css  js  c++  java
  • 【搜索】牛客练习赛16 C-任意点 (类似求联通块)

    链接:https://www.nowcoder.com/acm/contest/84/C

    类似求联通块  但是自己从来没接触过这个

    看来没有成体系的训练还是非常吃亏的  别人都见过

    而我傻傻的用暴力写  也没想到用搜索 更没想到用并查集

     

    暴力写法  很傻  只过了95

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 #define ll long long
     6 #define max3(a,b,c) fmax(a,fmax(b,c))
     7 #define ios ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
     8 
     9 bool cmp(const int &a,const int &b)
    10 {
    11     return a>b;
    12 }
    13 
    14 int xx[1100],yy[1100];
    15 
    16 struct node
    17 {
    18     int x;
    19     int y;
    20 }d[1100];
    21 
    22 int main()
    23 {
    24     int n,p;
    25     memset(xx,0,sizeof xx);
    26     memset(yy,0,sizeof yy);
    27     cin >> n;
    28     p = 0;
    29     for(int i = 1;i <= n;i++)
    30     {
    31         scanf("%d %d",&d[i].x,&d[i].y);
    32         xx[d[i].x]++;
    33         yy[d[i].y]++;
    34     }
    35     for(int i = 1;i <= n;i++)
    36     {
    37         if(xx[d[i].x] > 1 && yy[d[i].y] > 1)
    38         {
    39             p += 3;
    40             xx[d[i].x] -= 2;
    41             yy[d[i].y] -= 2;
    42         }
    43         else
    44         {
    45             if(xx[d[i].x] > 1 || yy[d[i].y] > 1)
    46             {
    47                 p += 1;
    48                 if(xx[d[i].x] > 1)
    49                     xx[d[i].x]--;
    50                 else
    51                     yy[d[i].y]--;
    52             }
    53         }
    54     }
    55     p = n-p-1;
    56     // if(p > 0)
    57         printf("%d
    ",p);
    58     // else
    59     //     printf("0
    ");
    60     // if(p > 1)
    61     //     printf("%d
    ",p);
    62     // else
    63     //     printf("0
    ");
    64     return 0;
    65 }
    View Code

    搜索写法 现在看来很精妙

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 #define ll long long
     6 #define max3(a,b,c) fmax(a,fmax(b,c))
     7 #define ios ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
     8 
     9 int m[1010][1010];
    10 void dfs(int x,int y)
    11 {
    12     m[x][y] = 0;
    13     for(int i = 1;i <= 1000;i++)
    14     {
    15         if(m[x][i] == 1)    dfs(x,i);
    16         if(m[i][y] == 1)    dfs(i,y);
    17     }
    18     return ;
    19 }
    20 
    21 int main()
    22 {
    23     int n,x,y;
    24     ll ans = 0;
    25     cin >> n;
    26     memset(m,0,sizeof m);
    27     for(int i = 1;i <= n;i++)
    28     {
    29         scanf("%d %d",&x,&y);
    30         m[x][y] = 1;
    31     }
    32     for(int i = 1;i <= 1000;i++)
    33     {
    34         for(int j = 1;j <= 1000;j++)
    35         {
    36             if(m[i][j] == 1)
    37             {
    38                 dfs(i,j);
    39                 ans++;
    40             }
    41         }
    42     }
    43     printf("%lld
    ",ans-1);
    44     
    45     return 0;
    46 }
    文章搬运自我的个人博客http://duny31030.top 原博客为静态博客,因备份丢失无法继续更新,所以又搬运回博客园,可能部分文章阅读体验不好,可以到我的静态博客搜索相同标题查看
  • 相关阅读:
    ActiveForm
    phpstudy配置虚拟主机
    PHP 二分查找
    mysql group by 用法解析(详细)
    Linux(CentOS)下的apache服务器配置与管理
    ubuntu server sudo出现sudo:must be setuid root 完美解决办法
    VB连接MYSQL数据的方法
    mysql 远程登录及常用命令
    在eclipse上搭建Roku开发环境
    linux ps查进程 kill关闭进程
  • 原文地址:https://www.cnblogs.com/duny31030/p/8967110.html
Copyright © 2011-2022 走看看