样例输出错误求助.阿巴啊巴

P6121 [USACO16OPEN] Closing the Farm G

奈因 @ 2020-09-26 22:11:39

#include <bits/stdc++.h>
using namespace std;
int n,m;
int a[10000000];
int f[10000000];
bool ans[10000000];
int head[10000000],next[10000000];
bool v[1000000];
int find(int x)
{
    if(f[x]!=x)f[x]=find(f[x]);
    return f[x];
}
struct edge{
    int x;
    int y;
};
int id=0; 
void add(int x,int y)
{
    id++;
    next[id]=head[x];
    head[x]=id;
}
edge e[1000000];
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        cin>>e[i].x>>e[i].y;
        add(e[i].x,e[i].y);
        add(e[i].y,e[i].x);
    }
    for(int i=1;i<=n;i++)
    {
        f[i]=i;
        cin>>a[i];
    }
    int cnt=0;
    for(int i=n;i>=1;i--)
    {
        int x=f[i];
        v[x]=1;
        cnt++;
        for(int j=head[x];j;j=next[j])
        {
            int p=e[j].y;
            if(!v[p])continue;
            int rx=find(x);
            int ry=find(p);
            if(rx!=ry)
            {
                f[rx]=ry;
                cnt--;
            }
        }
        if(cnt==1)ans[i]=1;
        else ans[i]=0;
    }
    for(int i=1;i<=n;i++)
    {
        if(ans[i])cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}

by Yun_Mengxi @ 2023-01-29 10:21:03

烤咕


|