2.6学习总结
写了两道题
#include <stdio.h>
#include <stdlib.h>
struct hly
{
int left;
int right;
int d;
}q[100005];
int main()
{
int n,m,k,p;
scanf("%d",&n);
q[1].left=0;
q[1].right=0;
q[0].left=1;
q[0].right=1;
for(int i=2;i<=n;i++){
scanf("%d %d",&k,&p);
if(p==1){
q[i].right=q[k].right;
q[i].left=k;
q[k].right=i;
q[q[i].right].left=i;
}
if(p==0){
q[i].left=q[k].left;
q[i].right=k;
q[k].left=i;
q[q[i].left].right=i;
}
}
scanf("%d",&m);
while(m--){
int x;
scanf("%d",&x);
q[x].d=1;
}
int t=q[0].right;
while(t!=0){
if(q[t].d==0)
printf("%d ",t);
t=q[t].right;
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int p[1005];
int find(int x)
{
if(p[x]==x)
return x;
return p[x]=find(p[x]);
}
void join(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx!=fy)
p[fx]=p[fy];
}
int main()
{
int n,m,num=0;
while(1){
scanf("%d",&n);
if(n==0)
return 0;
scanf("%d",&m);
for(int i=1;i<=n;i++){
p[i]=i;
}
for(int i=1;i<=m;i++){
int a,b;
scanf("%d %d",&a,&b);
join(a,b);
}
for(int i=1;i<=n;i++){
if(find(i)==i)
num++;
}
printf("%d\n",num-1);
num=0;
}
return 0;
}