记录编号 35050 评测结果 AAAAAAAAAA
题目名称 图的平方 最终得分 100
用户昵称 Gravatarbelong.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;
}