题解:CF1433D Districts Connection
一道简单构造题,一次性 AC。
一种想法是将所有值一样的点全部连到同一个不同值的点上,这样就是所有同一种值的点都有同一个父亲,即可避免连在一起的问题,无解的情况就是只有一种值。
时间复杂度
AC code:
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
const int maxn=1e6+5;
int t,n,a[maxn],c[maxn];
void solve(){
cin>>n;
int cnt=0;\
unordered_map<int,unordered_map<int,int>>pm;//去重数组
for(int i=1;i<=n;i++){
cin>>a[i];
}
bool flag=0;
for(int i=1;i<=n;i++){//枚举每个点
int pos=0;//找到的位置
for(int j=1;j<=n;j++){
if(a[j]!=a[i]){//第一个不同的值
pos=j;
break;
}
}
if(pos==0){//没找到,即全是一个值
cout<<"NO"<<endl;//无解
return;
}
for(int j=1;j<=n;j++){
if(a[j]==a[i]){//找与 i 相同的值
if(flag==0){//没有输出 YES
cout<<"YES"<<endl;//输出
flag=1;//标记
}
if(pm[pos][j]==1){//去重
continue;
}
cout<<pos<<' '<<j<<endl;//pos 与 j 是父子关系
pm[pos][j]=pm[j][pos]=1;//标记去重数组
}
}
}
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>t;
while(t--){
solve();
}
return 0;
}
本人(KK_SpongeBob)蒟蒻,写不出好文章,但转载请注明原文链接:https://www.cnblogs.com/OIer-QAQ/p/18575243
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期