比赛 “Asm.Def战记之夏威夷”杯 评测结果 AAAAAAAAAA
题目名称 Asm.Def的病毒 最终得分 100
用户昵称 Tychus 运行时间 0.064 s
代码语言 C++ 内存使用 0.33 MiB
提交时间 2015-11-06 11:40:30
显示代码纯文本
#include <iostream>
#include <cmath>
#include <iomanip>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
struct line
{
	int y,next;
}e[2010];
int linkk[1010],n,q,s1,s2,t1,t2;
bool f1[1010],flag,f2[1010];
void dfs1(int k)
{
	if (k==t1) flag=1;
	if (flag) return;
	for (int i=linkk[k];i;i=e[i].next)
		if (!f1[e[i].y])
		{
			f1[e[i].y]=1;
			dfs1(e[i].y);
			if (flag) return;
			f1[e[i].y]=0;
		}
}
void dfs2(int k)
{
	if (k==t2)
	{
		flag=1;
		for (int i=1;i<=n;i++)
			if (f1[i]&&f2[i])
			{
				flag=0;
				break;
			}
		if (!flag) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
		flag=1;
		return;
	}
	if (flag) return;
	for (int i=linkk[k];i;i=e[i].next)
		if (!f2[e[i].y])
		{
			f2[e[i].y]=1;
			dfs2(e[i].y);
			if (flag) return;
			f2[e[i].y]=0;
		}
}
int main()
{
	freopen("asm_virus.in","r",stdin);
	freopen("asm_virus.out","w",stdout);
	ios::sync_with_stdio(false);
	cin>>n>>q;
	for (int i=1;i<n;i++)
	{
		int l,r;
		cin>>l>>r;
		e[2*i-1].y=r;
		e[2*i-1].next=linkk[l];
		linkk[l]=2*i-1;
		e[2*i].y=l;
		e[2*i].next=linkk[r];
		linkk[r]=2*i;
	}
	for (int i=1;i<=q;i++)
	{
		flag=0;
		cin>>s1>>t1>>s2>>t2;
		memset(f1,0,sizeof(f1));
		memset(f2,0,sizeof(f2));
		f1[s1]=1;
		dfs1(s1);
		f2[s2]=1;
		flag=0;
		dfs2(s2);
	}
	return 0;
}