最近的任务是最短路,白书上的内容勉强能懂,一到做题就完了蛋了。这毕竟是具体的算法,不像DP只是思想,没有基础真的不行,于是学长让我先做并查集,再看树,再学图论……
说到并查集,有篇很经典的文章http://apps.hi.baidu.com/share/detail/15881874,要是讲算法的文章都是这种风格,那世界就太美好了。
代码如下:
1 #include<stdio.h> 2 int boss[10000010]; 3 int n,m; 4 int find(int a) 5 { 6 int i,j,r; 7 r = i = a; 8 while(boss[r] != r) 9 r = boss[r]; 10 while(i != r) 11 { 12 j = boss[i]; 13 boss[i] = r; 14 i = j; 15 } 16 return r; 17 } 18 int main() 19 { 20 int i,t1,t2,b1,b2,ans; 21 while(~scanf("%d%d",&n,&m)) 22 { 23 for(i = 1; i <= m; i++) 24 boss[i] = i; 25 ans = 0; 26 for(i = 0; i < n; i++) 27 { 28 scanf("%d%d",&t1,&t2); 29 b1 = find(t1); 30 b2 = find(t2); 31 if(b1 != b2) 32 boss[b2] = b1; 33 } 34 int t = find(1); 35 for(i = 2; i <= m; i++) 36 if(find(i) == t) 37 ans++; 38 printf("%d\n",ans); 39 } 40 return 0; 41 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步