当前位置:网站首页>2022.8.8考试区域链接(district)题解
2022.8.8考试区域链接(district)题解
2022-08-10 01:55:00 【bj_hacker】
题目
4、区域链接(district)–1200
时间限制: | 空间限制:
题目描述:
有 个点,第 个点的颜色为 。
你要添加 条双向边使所有点连通。一条边的两个端点颜色不能相同。
给出任意一种符合条件的构造方案,或者判断不存在符合条件的方案。共 组数据。
输入格式:
第一行仅有一个正整数 ( ),表示测试数据的组数。
每组测试数据包括两行:
第一行一个正整数 ( ,所有数据中 之和不超过 ),表示点的个数;
第二行 个正整数 ( ),表示每个点的颜色。
输出格式:
对于每组测试数据,若不存在符合条件的方案输出 ;
否则,第一行输出 ,接下来的 行输出你的构造方案中每条边的端点。
思路
将n个点能连出去的所有合法未访问过的点记录将剩下的点继续遍历
重点
时间复杂度仅支持O(n^2),合理控制
代码实现
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e3+10;
int t,n;
int a[maxn];
int mp[maxn][2];
bool vis[maxn];
inline bool Prim(){
memset(vis,false,sizeof(vis));
memset(mp,0,sizeof(mp));
vis[1]=true;
int cnt=0;
for(int i=1;i<=n;i++){
if(!vis[i])continue;
for(int j=1;j<=n;j++){
if(vis[j])continue;
if(a[i]==a[j])continue;
mp[++cnt][0]=i;
mp[cnt][1]=j;
vis[j]=true;
}
}
bool flag=true;
for(int i=1;i<=n;i++){
if(!vis[i]){
flag=false;
break;
}
}
if(flag)return true;
return false;
}
int main(){
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
if(Prim()){
printf("YES\n");
for(int i=1;i<=n-1;i++)printf("%d %d\n",mp[i][0],mp[i][1]);
}
else printf("NO\n");
}
return 0;
}
边栏推荐
猜你喜欢
随机推荐
Screen 拆分屏幕
.Net面试经验总结
In the 2022 gold, nine, silver and ten work tide, how can I successfully change jobs and get a high salary?
元素的盒子模型+标签的尺寸大小和偏移量+获取页面滚动距离
【SSRF漏洞】实战演示 超详细讲解
OpenCV图像处理学习四,像素的读写操作和图像反差函数操作
UXDB现在支持函数索引吗?
浏览器中的history详解
2022年立下的flag完成情况
【二叉树-中等】508. 出现次数最多的子树元素和
中级xss绕过【xss Game】
Fusion Compute网络虚拟化
自动化测试中,测试数据与脚本分离以及参数化方法
gbase 8a数据库如何查看数据或数据文件是否正常?
Data Governance (5): Metadata Management
Linux(Centos7)服务器中配置Mysql主从数据库,以及数据库的安装,防火墙操作
数据库治理利器:动态读写分离
Open3D 泊松盘网格采样
【web渗透】SSRF漏洞超详细讲解
墨西哥大众VW Mexico常见的几种label




![[Turn] Typora_Markdown_ picture title (caption)](/img/67/589eed8de86bff9fc017ae7c409410.png)




