并查集 hrbust oj 1725
32种病毒 查询看每个人感染几号病毒
/*
*
*涛哥代码
*
*
#include<stdio.h>
#include<stdlib.h>
struct node
{
int sum;
int p;
int ns[33];
}nn[1005];
int find(int x)
{
int s;
for (s=x; nn[s].p!=s; s=nn[s].p);
return s;
}
void join(int x, int y)
{
int i;
int px = find(x);
int py = find(y);
if (px != py)
{
nn[px].p = py;
nn[py].sum += nn[px].sum;
for (i =0; i < 33; ++i)
{
if (nn[px].ns[i] == 1)
{
nn[py].ns[i] = 1;
}
}
}
return ;
}
int main(void)
{
int t;
int i, j ,k;
int n, m, q;
int vi;
int p;
int a, b;
int cnt;
char str[10];
scanf("%d", &t);
while (t--)
{
scanf("%d%d", &n, &q);
for (i = 1; i <= n; ++i)
{
nn[i].p = i;
nn[i].sum = 0;
for (j = 0; j < 33; ++j)
{
nn[i].ns[j] = 0;
}
}
for (i = 1; i <= n; ++i)
{
scanf("%d", &vi);
if (vi > 0)
{
nn[i].ns[vi] = 1;
}
}
for (j=0; j < q; ++j)
{
scanf("%s", str);
if (str[0] == 'q')
{
scanf("%d", &vi);
p = find(vi);
cnt = 0;
for (i=0; i < 33; ++i)
{
if (nn[p].ns[i] == 1)
{
if (cnt == 0)
{
++cnt;
printf("%d", i);
}
else
{
++cnt;
printf(" %d", i);
}
}
}
if (cnt==0)
{
printf("0");
}
printf("\n");
}
else
{
scanf("%d%d", &a, &b);
join(a, b);
}
}
printf("\n");
}
return 0;
}*/
/*
*
*照着写的 好弱 T T
*
*/
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define clr(x) memset(x,0,sizeof(x))
struct node
{
int p;
int nx[33];
}nn[2000];
int find(int x)
{
if(nn[x].p==x)return x;
return nn[x].p=find(nn[x].p);
}
bool join(int x,int y)
{
int i;
x=find(x);
y=find(y);
if(x==y)return false;
if(x>y)
{
nn[x].p=y;
for(i=0;i<33;i++)
if(nn[x].nx[i])nn[y].nx[i]=1;
}
if(x<y)
{
nn[y].p=x;
for(i=0;i<33;i++)
if(nn[y].nx[i])nn[x].nx[i]=1;
}
return true;
}
int n,m,i,j,t,tt;
char s[20];
int main()
{
int f;
scanf("%d",&f);
while(f--)
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
nn[i].p=i;
for(j=0;j<33;j++)
nn[i].nx[j]=0;
}
for(i=1;i<=n;i++)
{
scanf("%d",&t);
if(t>0)
nn[i].nx[t]=1;
}
while(m--)
{
scanf("%s",s);
if(s[0]=='q')
{
scanf("%d",&t);
int cnt=0;
for(i=0;i<33;i++)
{
if(nn[find(t)].nx[i])
{
if(cnt==0)
{
printf("%d",i);
cnt++;
}
else
{
printf(" %d",i);
cnt++;
}
}
}
if(cnt==0)
{
printf("0");
}
printf("\n");
}
else
{
scanf("%d%d",&t,&tt);
join(t,tt);
}
}
printf("\n");
}
return 0;
}
hrbust 1725 并查集 (节点存放感染病毒信息)
最新推荐文章于 2019-03-28 23:59:00 发布