题目翻译:
给出n个节点m条边构成一个无向图,接下来给出k个待查询路径,看是否可以构成一个简单回路。
题解思路:
(1)题目中n+1==k?
(2)n个点是否都存在?
(3)路径首尾是否相连?
(4)路径是否连通?
为了这四个条件,先在线将数据处理一下,然后离线判断:
代码:
#include<bits/stdc++.h>
using namespace std;
int N, M, K;
map<pair<int, int>, bool> e;//表示边
int main()
{
cin >> N >> M;
for (int i = 0;i < M;i++)
{
int b1, b2;
cin >> b1 >> b2;
e[make_pair(b1, b2)] = 1;
e[make_pair(b2, b1)] = 1;
}
cin>>K;
for(int j=0;j<K;j++)
{
int s; cin >> s;
set<int> val;//判断是否包含全部顶点
vector<int> v;
while (s--)
{
int t; cin >> t;
v.push_back(t);
val.insert(t);
}
if (v.size() != N + 1||v[0]!=v.back()||val.size()!=N)
cout << "NO" << endl;
else
{
int last = v[0],root = last, i;
for (i = 1;i < v.size();i++)
{
if (e[make_pair(last, v[i])])
last = v[i];
else
{
cout << "NO" << endl; break;
}
}
if (i == v.size())
cout << "YES" << endl;
}
}
}
坑点:
无