专栏文章
题解:CF1651C Fault-tolerant Network
CF1651C题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mipuymk9
- 此快照首次捕获于
- 2025/12/03 18:22 3 个月前
- 此快照最后确认于
- 2025/12/03 18:22 3 个月前
题意
起初,对于每一排电脑,所有相邻的电脑之间有网线连接。因此两排电脑是相互独立的两套计算机网络。将第一排的第 台电脑和第二排的第 台电脑相连需要花费 ,你需要保证的是,不管哪台电脑坏掉,这个网络的剩余部分都不会断开。
思路
这道题很明显是一道贪心,我们发现 ,,, 要与另一排连接。这样可以保证计算机坏了后网络还是连通的。
- , 与 , 两两相连。
- , 其中一个与 , 其中一个连接。
- 四根线与另一排连接。
三种情况都扫描一遍求最小值即可。
代码
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[200010],b[200010];
signed main() {
int T;
cin>>T;
while(T--) {
int n;
int ans;
cin>>n;
for(int i=1; i<=n; i++)cin>>a[i];
for(int i=1; i<=n; i++)cin>>b[i];
ans=abs(a[1]-b[1])+abs(a[n]-b[n]);
ans=min(ans,abs(a[n]-b[1])+abs(a[1]-b[n]));
int a1,an,b1,bn;
a1=b1=an=bn=0x3f3f3f3f;
for(int i=1; i<=n; i++) {
a1=min(a1,abs(a[1]-b[i]));
an=min(an,abs(a[n]-b[i]));
b1=min(b1,abs(b[1]-a[i]));
bn=min(bn,abs(b[n]-a[i]));
}
ans=min(ans,abs(a[1]-b[1])+bn+an);
ans=min(ans,abs(a[1]-b[n])+an+b1);
ans=min(ans,abs(b[1]-a[n])+bn+a1);
ans=min(ans,abs(b[n]-a[n])+b1+a1);
ans=min(ans,a1+an+b1+bn);
cout<<ans<<endl;
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...