題目1526:朋友圈

來源:互聯網
上載者:User

題目來源http://ac.jobdu.com/problem.php?pid=1526

題目1526:朋友圈

時間限制:1 秒

記憶體限制:128 兆

特殊判題:

提交:411

解決:100

題目描述:

假如已知有n個人和m對好友關係(存於數字r)。如果兩個人是直接或間接的好友(好友的好友的好友...),則認為他們屬於同一個朋友圈,請寫程式求出這n個人裡一共有多少個朋友圈。
假如:n = 5 , m = 3 , r = {{1 , 2} , {2 , 3} , {4 , 5}},表示有5個人,1和2是好友,2和3是好友,4和5是好友,則1、2、3屬於一個朋友圈,4、5屬於另一個朋友圈,結果為2個朋友圈。

輸入:

輸入包含多個測試案例,每個測試案例的第一行包含兩個正整數 n、m,1=<n,m<=100000。接下來有m行,每行分別輸入兩個人的編號f,t(1=<f,t<=n),表示f和t是好友。 當n為0時,輸入結束,該用例不被處理。

輸出:

對應每個測試案例,輸出在這n個人裡一共有多少個朋友圈。

範例輸入:
5 31 22 34 53 31 21 32 30
範例輸出:
21
來源:
小米2013年校園招聘筆試題

 

思路:  並查集路徑壓縮演算法

 

import java.io.*;import java.util.*;public class Main {public static int n,m;public static int pattern[];public static void main(String[] args) {Scanner sc=new Scanner(new BufferedInputStream(System.in));PrintWriter pw=new PrintWriter(new BufferedOutputStream(System.out),true);while(sc.hasNext()){n=sc.nextInt();m=sc.nextInt();pattern=new int[n+1];for(int i=1;i<=n;i++){pattern[i]=i;}for(int i=0;i<m;i++){int a=sc.nextInt();int b=sc.nextInt();union(a,b);}int ans=0;for(int i=1;i<=n;i++){if(pattern[i]==i)ans++;}pw.println(ans);}}public static void union(int a,int b){int aa=fun(a);int bb=fun(b);if(aa==bb)return;if(aa>bb)pattern[bb]=aa;elsepattern[aa]=bb;}public static int fun(int aa){int p=pattern[aa];if(p==aa)return p;else return fun(p);}}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.