Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
注意输入输出的空格和换行!!!别问我怎么知道的#include <iostream> #include <cstdio> #define N 50010 using namespace std; struct node { int parent; int Rank; }t[N]; void make_set(int n) { for(int i=1;i<=n;i++) { t[i].parent=i; t[i].Rank=1; } } int find_(int x) { if(x!=t[x].parent) { t[x].parent=find_(t[x].parent); } return t[x].parent; } void Union(int a,int b) { int pa,pb; pa=find_(a); pb=find_(b); if(pa!=pb) { t[pb].parent=pa; t[pa].Rank+=t[pb].Rank; } } int main() { int flag=0; while(1) { int m,n; scanf("%d%d",&n,&m); make_set(n); if(n==0&&m==0)break; int ans=n; int tem=0; while(m--) { int a,b; scanf("%d%d",&a,&b); if(find_(a)!=find_(b)) { Union(a,b); } } for(int i=1;i<=n;i++) { if(t[i].Rank>1&&find_(i)==i) { tem+=(t[i].Rank-1); } } ans-=tem; flag++; printf("Case %d: %d\n",flag,ans); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator