M - 小希的迷宫

时间:2021-03-01 11:11:21
跟N题是一样的,不过会爆栈,有两种解决办法,第一种加
#pragma comment(linker, "/STACK:102400000,102400000")
这一行代码,不过只能用c++提交,第二种自己写个栈
/////////////////////////////////////
#pragma comment(linker, "/STACK:102400000,102400000")
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<queue>
using namespace std; const int maxn = ; int f[maxn], use[maxn]; void Init()
{
    for(int i=; i<maxn; i++)
        f[i] = i, use[i] = ;
}
int Find(int x)
{
    if(f[x] != x)
        f[x] = Find(f[x]);
    return f[x];
} int main()
{
    int u, v, ok=;     Init();
    while(scanf("%d%d", &u, &v), u!= - || v!=-)
    {
        if(u+v == )
        {
            int sum = ;             for(int i=; i<maxn; i++)
            {
                if(use[i] ==  && f[i] == i)
                    sum++;
            }             if(ok && sum < )printf("Yes\n");
            else printf("No\n");             ok = ;
            Init();
        }
        else
        {
            use[u] = use[v] = ;
            
            u = Find(u);
            v = Find(v);
            
            if(u != v)
                f[u] = v;
            else ok = ;
        }
    }     return ;

}