分值 : 25 难度 : 中等 思路 : 一般般 坑点 : 一开始自作聪明,以为图信息是没有用的,结果还是需要判断是否存在通路的。
123456789101112131415161718192021222324252627282930313233343536373839404142
#include <iostream>using namespace std;int list [201];int map[201][201];int flag[201] ;bool FLAG =true ;int main() { int N, M ; cin >> N >> M; for(int i = 0 ; i< M ; i++) { int c1 ,c2 ; cin >> c1 >> c2 ; map[c1][c2] =1 ; map[c2][c1] = 1 ; } int K ; cin >> K; for(int i = 0 ; i< K ; i++) { FLAG =true ; int n ; cin >> n ; if(n!=N+1) FLAG =false ; for(int j = 0 ; j < n ; j++) { cin >> list[j] ; if(j!=0) { if(!map[list[j-1]][list[j]]) FLAG = false ; } if(j!=n-1 && flag[list[j]] == i+1 ) //之前出现过 FLAG =false ; flag[ list[j] ] = i+1; } if(list[0] != list[n-1] || !FLAG) cout <<"NO"<<endl ; else cout <<"YES"<<endl ; }}