wa on #4 #5 #6
by NEO_bone @ 2022-09-16 10:42:53
```cpp
for(int i=1;i<=n;i++)
{
if(fa[i]==i)
continue;
c[fa[i]]+=c[i];
c[i]=0;
d[fa[i]]+=d[i];
d[i]=0;
}
```
改成
```cpp
for(int i=1;i<=n;i++)
{
if(fa[i]==i)
continue;
c[fin(i)]+=c[i];
c[i]=0;
d[fin(i)]+=d[i];
d[i]=0;
}
```
试试
by Nt_Tsumiki @ 2022-09-16 10:47:37
楼上大概是正解 但是swap是不是写错了啊(
by L_cm_C5H6 @ 2022-09-16 10:50:33
改了一下这里
```cpp
// if(fin(u)>fin(v))
// swap(u,v);
if(fin(v)!=fin(u))
c[fin(u)]+=c[fin(v)],d[fin(u)]+=d[fin(v)],fa[fin(v)]=fin(u);
```
删掉了这里
```cpp
// for(int i=1;i<=n;i++)
// {
// if(fa[i]==i)
// continue;
// c[fa[i]]+=c[i];
// c[i]=0;
// d[fa[i]]+=d[i];
// d[i]=0;
// }
```
把集合里的元素又新开了一个数组存起来
```cpp
int tot=0;
for(int i=1;i<=n;i++)
if(fa[i]==i)
C[++tot]=c[i],D[tot]=d[i];
}
```
by CeciliaWind @ 2022-09-16 10:59:14
A力(喜)
还是@Nt_Yester靠谱
by NEO_bone @ 2022-09-16 11:06:56
@[jcer_lazy_bone](/user/464094) )
by whitenightdaye @ 2022-09-16 11:29:41