1 条题解
-
0
C :
#include <stdio.h> int total; int pre[1001]; void init(int n){ int i; for(i=1;i<=n;++i){ pre[i] = i; } } int root(int x){ if(x!=pre[x]){ pre[x] = root(pre[x]); } return pre[x]; } void merge(int a,int b){ int x = root(a); int y = root(b); if(x!=y){ pre[x]=y; --total; } } int main(){ int N,M,i,st,end; while(scanf("%d",&N) && N){ scanf("%d",&M); init(N); total = N-1; for(i=0;i<M;++i){ scanf("%d %d",&st,&end); merge(st,end); } printf("%d\n",total); } return 0; }
C++ :
#include<stdio.h> int p[1000]; int Find(int i) { return i==p[i]?i:p[i]=Find(p[i]); } void Union(int a,int b) { p[a]=b; } int main() { int n,m,i,s,e,a,b,ans; while(scanf("%d",&n)!=EOF,n) { scanf("%d",&m); for(i=1;i<=n;i++) p[i]=i; while(m--) { scanf("%d%d",&s,&e); a=Find(s); b=Find(e); if(a!=b) p[a]=b; } for(ans=0,i=1;i<=n;i++) if(p[i]==i) ans++; printf("%d\n",ans-1); } return 0; }
Pascal :
var father:array[1..1000]of longint; i,j,n,q,ans,x,y:longint; function search(x:longint):longint; begin if father[x]<>x then father[x]:=search(father[x]); exit(father[x]); end; procedure judge(x,y:longint); var a,b:longint; begin a:=search(x); b:=search(y); if a<>b then father[b]:=a; end; begin read(n); while n<>0 do begin read(q); for i:=1 to n do father[i]:=i; for i:=1 to q do begin read(x,y); judge(x,y); end; ans:=0; for i:=1 to n do if father[i]=i then inc(ans); writeln(ans-1); read(n); end; end.
Java :
import java.util.Scanner; public class Main{ static int m,n; static int ans=0; static int a[]=new int[1000010]; static int[]pre=new int[1000010]; static void init() { for(int i=0;i<=m;i++) { pre[i]=i; } } static int find(int x) { if(pre[x]==x) return x; return pre[x]=find(pre[x]); } static void join(int x,int y) { int fx=find(x); int fy=find(y); if(fx!=fy) { pre[fx]=fy; } } static boolean judge(int x,int y) { return find(x)==find(y); } public static void main(String[]args) { Scanner sc=new Scanner(System.in); while(true) { for(int i=0;i<=m;i++) a[i]=0; m=sc.nextInt(); if(m==0)break; init(); n=sc.nextInt(); for(int i=0;i<n;i++) { int u=sc.nextInt(); int v=sc.nextInt(); join(u, v); }for(int i=1;i<=m;i++) { a[find(i)]=-1; if(a[i]!=-1) ans++; }System.out.println(m-ans-1); ans=0; } } }
- 1
信息
- ID
- 1136
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者