zoukankan      html  css  js  c++  java
  • 【蓝桥杯】第六届国赛C语言B组 3.关联账户(并查集)

    为增大反腐力度,某地警方专门支队,对若干银行账户展开调查。

    如果两个账户间发生过转账,则认为有关联。如果a,b间有关联, b,c间有关联,则认为a,c间也有关联。

    对于调查范围内的n个账户(编号0到n-1),警方已知道m条因转账引起的直接关联。

    现在希望知道任意给定的两个账户,求出它们间是否有关联。有关联的输出1,没有关联输出0

    小明给出了如下的解决方案:

     1 #include <stdio.h>
     2 #define N 100
     3 
     4 int connected(int* m, int p, int q)
     5 {
     6     return m[p]==m[q]? 1 : 0;
     7 }
     8 
     9 void link(int* m, int p, int q)
    10 {
    11     int i;
    12     if(connected(m,p,q)) return;
    13     int pID = m[p];
    14     int qID = m[q];
    15     for(i=0; i<N; i++)     _____________________________________; //填空位置
    16 }
    17 
    18 int main()
    19 {
    20     int m[N];
    21     int i;
    22     for(i=0; i<N; i++) m[i] = i; //初始状态,每个节点自成一个连通域
    23     link(m,0,1); //添加两个账户间的转账关联
    24     link(m,1,2); 
    25     link(m,3,4); 
    26     link(m,5,6); 
    27     link(m,6,7); 
    28     link(m,8,9); 
    29     link(m,3,7); 
    30 
    31     printf("%d ", connected(m,4,7));
    32     printf("%d ", connected(m,4,5));
    33     printf("%d ", connected(m,7,9));
    34     printf("%d ", connected(m,9,2));
    35     return 0;
    36 }
    37 
    38     

    请分析源代码,并提交划线部分缺少的代码。不要填写已有代码或任何多余内容。

    代码补全题

    并查集   了解并查集思想的话就很简单

    答案

    1 {    
    2     if(m[i] == qID)    
    3         m[i] = pID;    
    4 }    

    运行结果:

    文章搬运自我的个人博客http://duny31030.top 原博客为静态博客,因备份丢失无法继续更新,所以又搬运回博客园,可能部分文章阅读体验不好,可以到我的静态博客搜索相同标题查看
  • 相关阅读:
    BNUOJ 12756 Social Holidaying(二分匹配)
    HDU 1114 Piggy-Bank(完全背包)
    HDU 2844 Coins (多重背包)
    HDU 2602 Bone Collector(01背包)
    HDU 1171 Big Event in HDU(01背包)
    HDU 2571 命运 (入门dp)
    HDU 1069 Monkey and Banana(最长递减子序列)
    HDU 1160 FatMouse's Speed (最长上升子序列)
    HDU 2594 KMP
    POJ 3783 Balls --扔鸡蛋问题 经典DP
  • 原文地址:https://www.cnblogs.com/duny31030/p/9069945.html
Copyright © 2011-2022 走看看