| ||||||||||
| 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 | |||||||||
苍天啊,那位大牛能让我的程序AC啊!!!题目ID:2524#include <stdio.h>
#include <malloc.h>
void init(); //使每个节点的根节点都是本身
void contact(); //节点连接过程
void Father(int &x1, int &x2); //连接到自己的根节点
void cal(); //计算根节点个数
int n, *member, result = 0, num = 0;
int main()
{
init();
do
{
num++;
contact();
cal();
init();
}while(n != 0);
return 0;
}
void init() //使每个节点的根节点都是本身
{
scanf("%d", &n);
if (n > 0 && n <= 50000)
member = (int*)malloc(n*sizeof(int));
else
return;
for (int i=0;i<n;i++)
{
member[i] = i;
}
}
void contact() //节点连接过程
{
int m, x1, x2;
scanf("%d", &m);
if (m >= 0 && m <= n*(n-1)/2)
for (int i=0;i<m;i++)
{
scanf("%d%d", &x1, &x2);
Father(x1, x2);
}
}
void Father(int &x1, int &x2) //连接到自己的根节点
{
int tmp1 = x1-1, tmp2 = x2-1;
while (member[tmp1] != tmp1)
{
tmp1 = member[tmp1];
}
member[x1-1] = tmp1;
while (member[tmp2] != tmp2)
{
tmp2 = member[tmp2];
}
member[x2-1] = tmp2;
member[tmp1] = tmp2;
}
void cal() //计算根节点个数
{
result = 0;
for (int i=0;i<n;i++)
{
result = (member[i] == i)? result+1 : result;
}
printf("case %d: %d\n", num, result);
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator