http://neerc.ifmo.ru/past/2011/neerc-2011.pdf
并查集解决DNA遗传问题,对新手来说难度较大。
贴一发大神的代码,西南民大称他安神,大一获得四川ACM省赛金奖。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int n,m,K;
int DNA[300000];
int a[300000];
int b[300000];
int dead[300000];
char sex[300000];//记录每个个体的性别
int father[300000];//并查集,维护母性DNA关系
int compare(const void *a, const void *b)
{
return(*(int *)a-*(int *)b);
}
int find(int x)//递归查找算法
{
if(father[x]==x)
return x;
return father[x]=find(father[x]);
}
void Init()
{
int i,fa,mo;
memset(dead,0,sizeof(dead));
getchar();
for(i=1;i<=n;i++)
{