poj1182测试数据过了,但A不了,暂时放在这,以后再看

#include<iostream>
#define MAXN 1002
using namespace std;

int T[MAXN],X[MAXN],Y[MAXN],par[MAXN],shugao[MAXN];
void init(int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        par[i]=i;//一开始这些节点并没有联系
        shugao[i]=0;
    }
}
int f_ind(int x)
{
    if(par[x]==x)
    {
        return x;
    }else{
    return par[x]=f_ind(par[x]);
    }
}
bool same(int x,int y)
{
    return f_ind(x)==f_ind(y);
}
void unite(int x,int y)
{
    x=f_ind(x);
    y=f_ind(y);
    if(x==y)
    {
        return ;
    }
    if(shugao[x]<shugao[y])
    {
        par[x]=y;

    }
    else
    {
        par[y]=x;
        if(shugao[x]==shugao[y])
        {
            shugao[x]++;
        }
    }
}





int main()
{
    int i,N,K,x,y,t;

    cin >> N>>K;
    for(i=0;i<K;i++)//输入K组数据,范围在N之间
    {
        cin>>T[i]>>X[i]>>Y[i];
    }
    init(3*N);
    int ans=0;//记录错误信息
    for(i=0;i<K;i++)
    {
         x=X[i],y=Y[i],t=T[i];
        if(x<0||y>=N||y>N-1||y<0)
        {
            ans++;
            continue ;
        }
        if(t==1)
        {
            if(same(x,y+N)||same(x,y+2*N))
            {

                ans++;
            }
            else
            {
                unite(x,y);
                unite(x+N,y+N);
                unite(x+2*N,y+2*N);
            }

        }
        else
        {
            if(same(X[i],Y[i])||same(X[i],Y[i]+2*N))
            {
                ans++;
            }
            else
            {
                unite(x,y+N);
                unite(x+N,y+2*N);
                unite(x+2*N,y);
            }
        }

    }
    cout<<ans<<endl;
}

  

原文地址:https://www.cnblogs.com/41412179guo/p/4590743.html