• 2020牛客暑期多校训练营(第四场)I Investigating Legions 题解


    题意:

    给你一个 n 个点的图的邻接矩阵 ( n<=300 ) ,其中每个元素都有 1/S (20<=S<=100) 的几率出错,要求复原原图中那些点是在一个连通块里的。

    QAQ正解不懂啊QAQ……

    所以我学会了乱搞。

    由于出错的几率最大只有 1/20 ,我们可以大胆猜想出错的其实很少,所以我们对于一个还没确定连通块的点如下操作:

    找到与他相连的所有点,总计cnt个。

    对所有没确定连通块的点进行遍历,如果与这些点相连大于等于cnt/2就把他算到这个连通块里。

    (论乱搞的重要性

     1 #include<iostream>
     2 #include<cstdlib>
     3 #include<cstdio>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<algorithm>
     7 #define N 305
     8 using namespace std;
     9 int T,n,S,cnt,tmp[N],cnt1;
    10 bool ma[N][N];
    11 char BB[N*N];
    12 int fw[N];
    13 int main()
    14 {
    15     scanf("%d",&T);
    16     while(T--)
    17     {
    18         scanf("%d%d",&n,&S);
    19         scanf("%s",BB+1);
    20         cnt=0;
    21         cnt1=-1;
    22         memset(fw,-1,sizeof(fw));
    23         for(int i=1;i<=n;i++)
    24         {
    25             for(int j=i+1;j<=n;j++)
    26             {
    27                 cnt++;
    28                 ma[i][j]=ma[j][i]=(BB[cnt]=='1');
    29             }
    30             ma[i][i]=1; 
    31         }
    32         
    33         for(int i=1;i<=n;i++)
    34         {
    35             if(fw[i]==-1)
    36             {
    37                 cnt=0;
    38                 for(int j=1;j<=n;j++)
    39                 {
    40                     if(fw[j]==-1&&ma[i][j])
    41                     {
    42                         cnt++;
    43                         tmp[cnt]=j;
    44                     }
    45                 }
    46                 cnt1++;
    47                 int sum=0;
    48                 for(int j=1;j<=n;j++)
    49                 {
    50                     if(fw[j]==-1)
    51                     {
    52                         sum=0;
    53                         for(int k=1;k<=cnt;k++)
    54                         {
    55                             if(ma[j][tmp[k]])
    56                             {
    57                                 sum++;
    58                             }
    59                         }
    60                         if(sum>=cnt/2) fw[j]=cnt1;
    61                         
    62                     }
    63                 }
    64             }
    65         }
    66         for(int i=1;i<=n;i++)
    67         {
    68             printf("%d ",fw[i]);
    69         }
    70         printf("
    ");
    71     }
    72     return 0;
    73 }
    View Code
  • 相关阅读:
    咏南树形下拉列表数据敏感控件--TYNdbTreeList
    unigui session超时时间设置
    datasnap——动态注册服务类
    DataSnap——利用TParams进行多表事务更新
    咏南新CS插件开发框架支持DELPHI7
    centos7 samba安装与配置
    centos7设置系统语言为中文
    yndbtree控件
    Linux ClientDataSet libmidas.so.2
    菜单树
  • 原文地址:https://www.cnblogs.com/liutianrui/p/13363225.html
Copyright © 2020-2023  润新知