记录编号 23652 评测结果 AAAAAAAAAA
题目名称 图的平方 最终得分 100
用户昵称 GravatarPom 是否通过 通过
代码语言 C++ 运行时间 0.025 s
提交时间 2011-03-16 20:41:35 内存使用 17.77 MiB
显示代码纯文本
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>

using namespace std;

const int MAXN=111111;
const int MAXM=2222222;

struct edge
{
	int t;
	edge *p;
}e[MAXM],*v[MAXN];

int i,j,k,l,ans,n,m,Q,es=-1,l1[1111],l2[1111],r1[1111],r2[1111];
bool b[MAXN];

inline void addedge(int i,int j)
{
	e[++es].t=j; e[es].p=v[i]; v[i]=e+es;
}

int main()
{
	freopen("ljb.in","r",stdin);
	freopen("ljb.out","w",stdout);
	scanf("%d%d",&n,&m);
	for (i=1;i<=m;i++)
	{
		scanf("%d%d%d%d",&l1[i],&r1[i],&l2[i],&r2[i]);
	}
	for (i=1;i<=m;i++)
		for (j=1;j<=m;j++)
			if (i!=j)
				if (l1[j]>=l2[i] && l1[j]<=r2[i] || r1[j]>=l2[i] && r1[j]<=r2[i])
					for (k=l1[i];k<=r1[i];k++)
						for (l=l2[j];l<=r2[j];l++)
							addedge(k,l);
	scanf("%d",&Q);
	while (Q--)
	{
		bool flag=true;
		int sum,L1,L2,R1,R2;
		scanf("%d%d%d%d",&L1,&R1,&L2,&R2);
		for (i=L1;i<=R1;i++)
		{
			for (j=L2;j<=R2;j++)
				b[j]=false;
			sum=0;
			for (edge *x=v[i];x;x=x->p)
				if (x->t<=R2 && x->t>=L2 && !b[x->t])
				{
					b[x->t]=true;
					sum++;
					if (sum==R2-L2+1) break;
				}
			if (sum!=R2-L2+1)
			{
				flag=false;
				break;
			}
		}
		if (flag) printf("Yes\n");
		else printf("No\n");
	}
	return 0;
}