日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

uva 10608 FRIENDS

發布時間:2024/4/15 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 uva 10608 FRIENDS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

純粹考察并查集,算是一個經典問題;統計一個集合中有多少個元素,然后找到元素個數最多的集合

就普通的并查集,就能過了

然后另外寫了壓縮路徑,沒想到時間沒有改變

然后再寫一個,時間還是沒有改變,好吧……………………

只要懂基本的并查集的話,代碼都不成問題,很裸的并查集而已

?

代碼一:純粹

#include <cstdio> #include <cstring> #define N 30000 int p[N],c[N]; int n,m;int find(int x) { return p[x]==x ? x : p[x]=find(p[x]); }int main() {int T;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);for(int i=1; i<=n; i++){ p[i]=i; c[i]=0; }for(int i=1; i<=m; i++){int x,y,u,v;scanf("%d%d",&u,&v);x=find(u);y=find(v);if(x!=y)p[x]=y;}for(int i=1; i<=n; i++) //掃描所有元素找到他們的祖先然后祖先的孩子數計數 {int x=find(i);c[x]++;}int max=0;for(int i=1; i<=n; i++)if(c[i]>max)max=c[i];printf("%d\n",max);}return 0; }

?

代碼二:壓縮路徑

#include <cstdio> #include <cstring> #define N 30000 int p[N],c[N]; int n,m;int find(int x) //迭代式 {int i=x,r=x,j;while(r!=p[r])r=p[r];while(i!=r) //路徑壓縮 {j=p[i]; //先記錄下i的雙親p[i]=r; //修改i的雙親直接與祖先相連i=j; //接下來修改原本的雙親 }return r; }int main() {int T;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);for(int i=1; i<=n; i++){ p[i]=i; c[i]=0; }for(int i=1; i<=m; i++){int x,y,u,v;scanf("%d%d",&u,&v);x=find(u);y=find(v);if(x!=y)p[x]=y;}for(int i=1; i<=n; i++) //掃描所有元素找到他們的祖先然后祖先的孩子數計數 {int x=find(i);c[x]++;}int max=0;for(int i=1; i<=n; i++)if(c[i]>max)max=c[i];printf("%d\n",max);}return 0; }

?

代碼三:再修改一下統計集合元素的方法

#include <cstdio> #include <cstring> #define N 30000 int p[N],c[N]; int n,m;int find(int x) //迭代式 {int i=x,r=x,j;while(r!=p[r])r=p[r];while(i!=r) //路徑壓縮 {j=p[i]; //先記錄下i的雙親p[i]=r; //修改i的雙親直接與祖先相連i=j; //接下來修改原本的雙親 }return r; }int main() {int T;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);for(int i=1; i<=n; i++){ p[i]=i; c[i]=1; }int max=0;for(int i=1; i<=m; i++){int x,y,u,v;scanf("%d%d",&u,&v);x=find(u);y=find(v);if(x!=y){p[x]=y;c[y]+=c[x];if(c[y]>max)max=c[y];}}printf("%d\n",max);}return 0; }

?

?

悲劇,時間沒本質提高啊………………………………

總結

以上是生活随笔為你收集整理的uva 10608 FRIENDS的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。