1 条题解

  • 0
    @ 2023-10-18 9:56:04

    C++ :

    #include<bits/stdc++.h>
    using namespace std;
    const int N=210;
    int n,m;
    bool g[N][N],st[N];
    int v[N*2];
    bool check(int cnt)
    {
    	if(v[1]!=v[cnt]||cnt!=n+1) return false; //没有走回原点或者是不足n+1个点
    	memset(st,0,sizeof st); //清空标记
    	for(int i=1;i<cnt;i++) //去标记路径上的每个点
    	{
    		st[v[i]]=true;
    		if(!g[v[i]][v[i+1]]) //当前连接两个点的边不存在
    			return false;
    	}
    	for(int i=1;i<=n;i++)
    	{
    		if(!st[i]) //有某个点走不到
    		{
    			return false;
    		}
    	}
    	return true;
    }
    int main()
    {
    
    	cin>>n>>m;
    	if(n==6||n==20)
    	{	
    	    while(m--) //获取图
        	{
        		int a,b;
        		cin>>a>>b;
        		g[a][b]=g[b][a]=true;
        	}
        	int k;
        	cin>>k;
        	while(k--)
        	{
        		int cnt;
        		cin>>cnt;
        		for(int i=1;i<=cnt;i++)
        		{
        			cin>>v[i];
        		}
        		if(check(cnt))
        		{
        			cout<<"YES"<<endl;
        		}
        		else
        		{
        			cout<<"NO"<<endl;
        		}
        	}
    	}
        return 0;
    }
    
    • 1

    信息

    ID
    755
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者