记录编号 | 35050 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | 图的平方 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | 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; }