1. 程式人生 > >PAT (Advanced Level) Practice 1122 Hamiltonian Cycle (25 分)

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

智障錯誤調了我一天- =,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; }