蓝桥杯 历届试题 国王的烦恼(并查集+快排)---------------------------C语言——菜鸟级

17人阅读 评论(0) 收藏 举报

解题思路:采用并查集的思想,逆向的将树建一遍,所以这里我需要对天数排序,
从大到小进行排序。接着进行建树,在建树的过程中不断地进行判断,我之前是否有
这个桥,如果没有那么就抗议次数++。这里还有一个需要注意的就是:前一次是在
第几天抗议的,如果是同一天的话就不要++了,所以这里要特殊判断一下。

详见代码。

`#include<stdio.h> 
long int f[10002];
struct node
{ long int a,b,t;
} s[100003];
void init(long int n)//初始化 
{ long int i;
  for(i=1;i<=n;i++)
    f[i]=i;
}
long int ftop(long int x)//寻根节点 
{   long int t,tx=x;
   while(tx!=f[tx])tx=f[tx];
   while(x!=tx)
   {   t=f[x];
       f[x]=tx;
       x=t;
   }
   return tx;
}
int find(long int x,long int y)
{  
      x=ftop(x);
      y=ftop(y);
      if(y!=x)//判断是否在同一集合 
      { f[y]=x;
       return 1; 
      }
      return 0;
}
 void swp(long int x,long int y)//快排 
 { struct node te=s[x];s[x]=s[y];s[y]=te;}

    long  int kp(long int ks,long int js)
    {    long int x=s[ks].t;
       long int i=ks,j=js+1;
       while(1)
       {  while(s[++i].t<x&&i<js);
          while(s[--j].t>x);
          if(i<j)swp(i,j);
          else break;
       }
       swp(ks,j);
       return j;
    }
 void ppp(long int ks,long int js)
 { long int r;
     if(ks<js)
     {  r=kp(ks,js);
        ppp(ks,r-1);
        ppp(r+1,js);
     }
 }
int main()
{
 long int n,m,i,j,sum=0,pre=-1;
 scanf("%ld%ld",&n,&m);
 init(n);
for(i=1;i<=m;i++)
scanf("%ld%ld%ld",&s[i].a,&s[i].b,&s[i].t);
ppp(1,m);//快排 
 for(i=m;i>=1;i--)
if(find(s[i].a,s[i].b)&&s[i].t!=pre)sum++,pre=s[i].t;
 printf("%ld\n",sum);
return 0;
}`
查看评论

软件复用为软件开发提速

软件复用为软件开发提速四木(本文转载自软件工程专家网www.21cmm.com)    随着社会信息化程度的提高,IT技术已经深入到社会生活的方方面面,而软件作为IT技术应用的核心,其重要性也日渐突出...
  • gigix
  • gigix
  • 2002-04-09 09:37:00
  • 1393

(蓝桥杯)历届试题 国王的烦恼 (并查集)

历届试题 国王的烦恼   时间限制:1.0s   内存限制:256.0MB      问题描述   C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小...
  • qiqi_skystar
  • qiqi_skystar
  • 2016-03-18 15:08:35
  • 2738

历届试题 国王的烦恼

问题描述   C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛。两个小岛间可能存在多座桥连接。然而,由于海水冲刷,有一些大桥面临着不能使用的危险。 ...
  • fljssj
  • fljssj
  • 2015-04-03 20:59:43
  • 904

蓝桥杯--- 历届试题 国王的烦恼 (并查集)

提交网址:http://lx.lanqiao.org/problem.page?gpid=T114 问题描述   C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两...
  • u014665013
  • u014665013
  • 2015-05-05 10:06:18
  • 2632

历届试题 国王的烦恼 (并查集)

问题描述   C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛。两个小岛间可能存在多座桥连接。然而,由于海水冲刷,有一些大桥面临着不能使用的危险。 ...
  • update7
  • update7
  • 2017-02-26 15:24:58
  • 18720

nyoj 925 国王的烦恼

国王的烦恼 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述     C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大...
  • leibniz_zhang
  • leibniz_zhang
  • 2016-04-15 22:57:17
  • 483

国王的烦恼 解题报告

历届试题 国王的烦恼   时间限制:1.0s   内存限制:256.0MB     问题描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛。两个小岛间...
  • lixiaomu2
  • lixiaomu2
  • 2017-02-10 17:23:09
  • 197

蓝桥杯 国王的烦恼 反向并查集

这题刚开始用搜索做的,超时不超时不知道,因为测试数据都没过,然后看到别人用的反向并查集,秒懂, 因为起初我也是想的用并查集,但是想的是正向并查集,没有想到反向并查集。 #include #incl...
  • ONE_PIECE_HMH
  • ONE_PIECE_HMH
  • 2016-03-17 18:45:42
  • 551

蓝桥杯 历届试题 国王的烦恼

历届试题 国王的烦恼 时间限制:1.0s 内存限制:256.0MB问题描述   C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛。两个小岛间可能存在多...
  • mymilkbottles
  • mymilkbottles
  • 2015-10-28 19:15:14
  • 1372

蓝桥杯 历届试题 国王的烦恼

关键:从最大的天数往前开始建立连接图 思路: 以天数为表头建立邻接表  取出最大和最小的天数,从最大的天数开始往前计算,一直算到最小的天数, 如果某一天t将两个不连通的小岛连接起来则该天会收到抗议;如...
  • lnlnlnying
  • lnlnlnying
  • 2016-12-02 11:20:43
  • 427
    个人资料
    持之以恒
    等级:
    访问量: 0
    积分: 345
    排名: 0
    文章存档
    最新评论