PAT A1122

clipboard.png
本身在圖論不是一道難題;

需要注意這個環判斷的幾個隱藏點:
1.首位相同;
2.每個節點只能訪問一次;

這裏借鑑一位大神的操作,其實兩種情況可以分兩種判別方式,分開判別;
這裏再次說一下set查重賊好用,這裏可以看是否出現重複節點;

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<vector>
#include<set>
using namespace std;
using std::vector;
using std::set;
const int maxn=210;
int main(){
    int n,m,cnt,k,a[maxn][maxn]={0};
    cin>>n>>m;
    for(int i=0;i<m;i++){
        int t1,t2;
        scanf("%d%d",&t1,&t2);
        a[t1][t2]=a[t2][t1]=1;
    }
    cin>>cnt;
    while(cnt--){
        cin>>k;
        vector<int> v(k);
        set<int> s;
        int f1=1;
        int f2=1;
        for(int i=0;i<k;i++){
            scanf("%d",&v[i]);
            s.insert(v[i]);
        }
        if(s.size()!=n||k-1!=n||v[0]!=v[k-1])
            f1=0;
        for(int i=0;i<k-1;i++)
            if(a[v[i]][v[i+1]]==0)
                f2=false;
        printf("%s",f1&&f2?"YES\n":"NO\n");
    }
    system("pause");
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章