并查集全WA求问

P1197 [JSOI2008] 星球大战

Ja50nY0un9_as_AgNO3 @ 2022-11-15 09:31:50

rt,全WA

具体看注释吧

# include <iostream>
# include <vector>
# define int long long
using namespace std;
int ft[400001];
vector <int> v[400001];
int des[400001];
int ans[400001];
bool flag[400001];

int find(int x)
{
    if(ft[x]==x) return x;
    return ft[x]=find(ft[x]);
}

void merge(int x, int y)
{
    ft[find(x)]=find(y);
}

signed main()
{
    int n, m, k;
    cin>>n>>m;
    while(m--)
    {
        int x, y;
        cin>>x>>y;
        v[x].push_back(y);
        v[y].push_back(x);
        //建图
    }
    cin>>k;
    for(int i=0; i<n; i++) ft[i]=i;
    for(int i=k; i>=1; i--)
    {
        cin>>des[i];
        flag[des[i]]=true;
        //反向存储,以备修建
    }
    ans[0]=n-k;
    //未被摧毁的星球数目
    //初始都是单独的联通块
    for(int i=0; i<n; i++)
    {
        if(flag[i]) continue;
        for(int j=0; j<v[i].size(); j++)
        {
            int y=v[i][j];
            if(flag[y]) continue;
            if(find(i)==find(y)) continue;
            merge(i, y);
            ans[0]--;
            //建最终状态
        }
    }
    for(int i=1; i<=k; i++)
    {
        int x=des[i];
        flag[x]=false;
        ans[i]++;//初始单个星球就是一个联通块
        ans[i]+=ans[i-1];//建立在上一个基础上
        for(int j=0; j<v[x].size(); j++)
        {
            int y=v[x][j];
            if(flag[y]) continue;
            //若另一头仍未修复
            if(find(x)==find(y)) continue;
            //不在同一个联通块
            merge(x, y);
            ans[i]--;
            //两个联通块合并为一个
        }
    }
    cout<<ans[0]<<endl;
    for(int i=k; i>=1; i--)
    {
        cout<<ans[i]<<endl;
        //按摧毁顺序输出
    }
    return 0;
}

by Ja50nY0un9_as_AgNO3 @ 2022-11-15 09:32:29

都在第一行就WA了,有过大有过小


by Whisperain @ 2022-11-15 10:36:38

,,,有点无法吐槽


by Whisperain @ 2022-11-15 10:38:37

    cout<<ans[0]<<endl;
    for(int i=k; i>=1; i--)
    {
        cout<<ans[i]<<endl;
        //按摧毁顺序输出
    }

改为

    for(int i=k; i>=1; i--)
    {
        cout<<ans[i]<<endl;
        //按摧毁顺序输出
    }
    cout<<ans[0]<<endl;

by Whisperain @ 2022-11-15 14:09:04

@Ja50nY0un9


by Ja50nY0un9_as_AgNO3 @ 2022-11-15 14:10:56

额……?

我去试试

@Whisperain 谢谢


by Ja50nY0un9_as_AgNO3 @ 2022-11-15 14:12:06

@Whisperain 已过,谢谢

您获得了粉丝*1


|