记录编号 589520 评测结果 AAAAAAAAAA
题目名称 图的平方 最终得分 100
用户昵称 Gravatar花火 是否通过 通过
代码语言 C++ 运行时间 0.137 s
提交时间 2024-07-06 14:36:45 内存使用 5.93 MiB
显示代码纯文本
#include <bits/stdc++.h> // 万能头
using namespace std;
int v,m,n; // v是顶点个数,m是范围个数,n是查询个数
vector<int> g[100005]; // 声明一个邻接表,用vector节省一些空间,实测程序总内存使用10M左右
bool jdg(int x,int y) // 传入起点x,终点y,jdg函数判断是否在x,y之间有仅包含两条边的路径
{
	for(int i = 0;i < g[x].size();i++)
		for(int j = 0;j < g[g[x][i]].size();j++)
			if(g[g[x][i]][j] == y) return 1;
	return 0;
}
/*
jdg思路:双重循环暴力枚举,第一层在x的邻接顶点中枚举一个i,
第二层在i的邻接顶点中枚举一个j,判断j是否为y
枚举成功返回1,失败返回0
*/
int main()
{
	freopen("ljb.in","r",stdin); // 文件输入输出
	freopen("ljb.out","w",stdout);
	scanf("%d%d",&v,&m); // 读入v,m
	for(int i = 0;i < m;i++)
	{
		int u1,u2,v1,v2;
		scanf("%d%d%d%d",&u1,&u2,&v1,&v2); // 循环读入两个范围
		for(int j = u1;j <= u2;j++)
			for(int k = v1;k <= v2;k++)
				g[j].push_back(k); // 在邻接表中添加顶点
	}
	scanf("%d",&n); // 读入n
	for(int i = 0;i < n;i++)
	{
		int flag = 1; // 标记[x1,x2]到[y1,y2]中是否有枚举失败的点对,0表示有,1表示没有
		int x1,x2,y1,y2;
		scanf("%d%d%d%d",&x1,&x2,&y1,&y2); // 循环读入两个询问范围,即时判断输出
		for(int j = x1;j <= x2;j++)
			for(int k = y1;k <= y2;k++)
				if(!jdg(j,k)) flag = 0; // 暴力枚举
		if(flag) printf("Yes\n"); // 输出
		else printf("No\n");
	}
	return 0;
}