记录编号 |
35050 |
评测结果 |
AAAAAAAAAA |
题目名称 |
图的平方 |
最终得分 |
100 |
用户昵称 |
belong.zmx |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.025 s |
提交时间 |
2012-02-14 21:21:54 |
内存使用 |
17.77 MiB |
显示代码纯文本
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
using namespace std;
struct edge{int to,fo;}e[2222222];
int n,m,l[111111],l1[1111],l2[1111],r1[1111],r2[1111],top;
bool t[111111],flag;
void addedge(int st,int en)
{
e[++top].to=en;e[top].fo=l[st];l[st]=top;
}
void init()
{
scanf("%d %d\n",&n,&m);
for (int i=1;i<=m;i++)
{
scanf("%d %d %d %d\n",&l1[i],&r1[i],&l2[i],&r2[i]);
}
for (int i=1;i<=m;i++)
for (int 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 (int k=l1[i];k<=r1[i];k++)
for (int o=l2[j];o<=r2[j];o++) addedge(k,o);
}
}
void dispose()
{
int Que,tot;
int L1,L2,R1,R2;
scanf("%d\n",&Que);
for (int Y=1;Y<=Que;Y++)
{
flag=true;
scanf("%d %d %d %d\n",&L1,&R1,&L2,&R2);
for (int i=L1;i<=R1;i++)
{
for (int j=L2;j<=R2;j++) t[j]=false;
tot=0;
for (int o=l[i];o>0;o=e[o].fo)
if (e[o].to>=L2&&e[o].to<=R2&&!t[e[o].to])
{
t[e[o].to]=true;
tot++;if (tot==R2-L2+1) break;
}
if (tot!=R2-L2+1)
{
flag=false;break;
}
}
if (flag) printf("Yes\n");
else printf("No\n");
}
}
int main()
{
freopen("ljb.in","r",stdin);
freopen("ljb.out","w",stdout);
init();
dispose();
return 0;
}