题目链接:点击打开链接
题目大意:给一个无向图,判断给出的任意两点(注意起点等于终点的情况)是否存在一条经过的边数为奇数的路径。
解题思路:略。
AC 代码
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
int n,m,flag,s,e;
int vis[maxn];
vector<int> v[maxn];
void init()
{
for(int i=0;i<n;i++)
{
vis[i]=0;
v[i].clear();
}
}
void dfs(int s,int k)
{
if(flag) return;
if(s==e)
{
if(k%2==1) flag=1;
return;
}
for(int i=0;i<v[s].size();i++)
{
int idx=v[s][i];
if(!vis[idx])
{
vis[idx]=1;
dfs(idx,k+1);
vis[idx]=0;
}
}
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
init();
int q;
for(int i=0;i<m;i++)
{
scanf("%d%d",&s,&e);
v[s].push_back(e);
v[e].push_back(s);
}
scanf("%d",&q);
while(q--)
{
flag=0;
scanf("%d%d",&s,&e);
if(s==e) { puts("No"); continue; }
dfs(s,0);
if(flag) puts("Yes");
else puts("No");
}
}
return 0;
}