【PAT甲级】1122 Hamiltonian Cycle (25分)
题意:
输入一个正整数N(2<N<=200),表示结点个数,接着输入一个正整数M。输入M条有向边,输入一个正整数K,接着输入K次询问,每次询问包含一个圆环点总数,以及若干点。输出是否这些点构成一个环并且所有点都在环内。
trick:
数组开200或者300都会在最后一个测试点段错误。
AAAAAccepted code:
1 #define HAVE_STRUCT_TIMESPEC 2 #include<bits/stdc++.h> 3 using namespace std; 4 set<int>v[407]; 5 int a[407]; 6 int vis[407]; 7 int main(){ 8 ios::sync_with_stdio(false); 9 cin.tie(NULL); 10 cout.tie(NULL); 11 int n,m; 12 cin>>n>>m; 13 for(int i=1;i<=m;++i){ 14 int x,y; 15 cin>>x>>y; 16 v[x].insert(y); 17 v[y].insert(x); 18 } 19 int k; 20 cin>>k; 21 for(int i=1;i<=k;++i){ 22 memset(vis,0,sizeof vis); 23 int x; 24 cin>>x; 25 for(int j=1;j<=x;++j) 26 cin>>a[j]; 27 int flag=0; 28 if(a[x]!=a[1]) 29 flag=1; 30 if(x!=1+n) 31 flag=1; 32 for(int j=2;j<=x;++j){ 33 if(!v[a[j-1]].count(a[j])) 34 flag=1; 35 if(vis[a[j-1]]&&j<x) 36 flag=1; 37 vis[a[j-1]]=1; 38 } 39 if(flag) 40 cout<<"NO"; 41 else 42 cout<<"YES"; 43 if(i<k) 44 cout<<"\n"; 45 } 46 return 0; 47 }
保持热爱 不懈努力
不试试看怎么知道会失败呢(划掉)
世上无难事 只要肯放弃(划掉)