当前位置:网站首页>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;
}
边栏推荐
猜你喜欢
随机推荐
C# 正则表达式分组查询
.Net interview experience summary
OOD论文:Revisit Overconfidence for OOD Detection
LeetCode每日两题02:两数之和 II - 输入有序数组 (均1200道)
xss的DOMPurify过滤框架:一个循环问题以及两个循环问题
华为HCIE云计算之FC添加ipsan数据存储
元素的盒子模型+标签的尺寸大小和偏移量+获取页面滚动距离
控制台中查看莫格命令的详细信息
web crawler error
程序员的专属浪漫——用3D Engine 5分钟实现烟花绽放效果
RESOURCE_EXHAUSTED: etcdserver: mvcc: database space exceeded
《GB39732-2020》PDF download
[QNX Hypervisor 2.2用户手册]10.14 smmu
Open3D 网格均匀采样
Unity editor extension interface uses List
UXDB现在支持函数索引吗?
翻译工具-翻译工具下载批量自动一键翻译免费
用于X射线光学器件的哈特曼波前传感器
【二叉树-中等】1379. 找出克隆二叉树中的相同节点
免费文档翻译软件电脑版软件









