PAT (Advanced Level) Practice 1122 Hamiltonian Cycle (25 分)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Nightmare_ak/article/details/84848793

智障错误调了我一天- =,a的大小可能超过N,导致数组越界,wa最后一个样例。

#include<cstdio>
#include<cstring>
#include<map>
#include<vector>
using namespace std;

typedef pair<int,int> pii;

const int N=200+5;

int k,n,m;
vector<int> a;
map<int,int> vis;
map<pii,int> mp;

int check()
{
    vis.clear();
    if(k!=n+1||a[0]!=a[k-1]) return 0;
    vis[a[0]]=1;
    for(int i=1;i<k;i++)
    {
        pii p=make_pair(a[i-1],a[i]);
        if(!mp[p]) return 0;
        if(vis[a[i]]&&i!=k-1) return 0;
        vis[a[i]]=1;
    }
    return 1;
}

int main()
{
    scanf("%d%d",&n,&m);
    while(m--)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        mp[make_pair(u,v)]=mp[make_pair(v,u)]=1;
    }
    int q;scanf("%d",&q);
    while(q--)
    {
        scanf("%d",&k);
        a.clear();
        for(int i=0;i<k;i++)
        {
            int x;scanf("%d",&x);
            a.push_back(x);
        }
        if(check()) puts("YES");
        else puts("NO");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Nightmare_ak/article/details/84848793
今日推荐