题目链接
题目大意:
一个镇上有 n 个区 一个区里有一个土匪窝 最初的时候 没有区是相互连接的
然后要 建 n-1 条道路来连接所有的区 (两个区域可以直接相连也可以通过其它连接的区域相连)
但是 同属一个土匪窝的区不能直接相连
输出 可以构建的道路
解题思路:
直接在输入的时候 判断和第一个区 不在同一个土匪窝的是哪个区 标记为 K
如果输入完毕后 没有找到那个区 说明 所有区都是同一个土匪窝 输出 NO
否则就再遍历一遍 如果和第一个区不一个土匪窝 就在两个区之间修路
不然就在 K 和这个区之间修路
代码如下:
#include<iostream>
using namespace std;
const int maxn=1e4;
int a[maxn];
int main()
{
int t;
int n;
int i,j,k;
cin>>t;
while(t--)
{
cin>>n;
k=-1;
cin>>a[1];
for(i=2;i<=n;i++)
{
cin>>a[i];
if(a[i]!=a[1])
k=i;
}
if(k==-1)
{
cout<<"NO"<<endl;
continue;
}
else
{
cout<<"YES"<<endl;
for(i=2;i<=n;i++)
{
if(a[i]!=a[1])
{
cout<<"1 "<<i<<endl;
}
else
cout<<k<<" "<<i<<endl;
}
}
}
return 0;
}
这篇博客讨论了一种算法问题,即在一个由n个区组成的镇上,每个区可能属于不同的土匪窝。目标是用n-1条道路连接所有区,但条件是同一土匪窝的区不能直接相连。解决方案是在读取输入时找到第一个不同土匪窝的区(标记为K),若未找到则输出“NO”,表示无法构建;否则,遍历所有区,与第一个区不同土匪窝的区之间直接连接,相同土匪窝的区则通过K连接。给出的C++代码实现了这一逻辑。
174

被折叠的 条评论
为什么被折叠?



