社区讨论
50ptsTLE的康康
P4826 [USACO15FEB] Superbull S参与者 4已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @lo23hlgk
- 此快照首次捕获于
- 2023/10/23 07:23 2 年前
- 此快照最后确认于
- 2024/08/07 14:22 2 年前
这份代码,不开O2 50pts,5~10全TLE,开了100pts.
所以……要不要开下 试试?
CPP#include <bits/stdc++.h>
using namespace std;
#define int long long
inline int read() {
int a=0,f=1;
char c=getchar();
while(c<'0'||c>'9') {
if (c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9') {
a=a*10+(c-'0');
c=getchar();
}
return f*a;
}
int n,s1=0,k,f[4000005],m,b[4000005];
int find(int x) {
if (f[x]!=x)
f[x]=find(f[x]);
return f[x];
}
void un(int x1,int x2) {
int x=find(x1);
int y=find(x2);
if (x!=y)
f[x]=y;
}
struct node {
int x,y,s;
} a[4000005];
int k1=0;
bool cmp(node a,node b) {
return a.s>b.s;
}
main() {
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
n=read();
for(int i=1; i<=n; i++)
b[i]=read();
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
a[++m].x=i,a[m].y=j,a[m].s=b[i]^b[j];
for (int i=1; i<=n; i++)
f[i]=i;
sort(a+1,a+1+m,cmp);
int i=1,kk=0;
while(i<=m) {
while(find(a[i].x)==find(a[i].y)&&i<=m)
i++;
un(a[i].x,a[i].y);
s1+=a[i].s;
kk++;
if (kk==n-1) {
printf("%lld\n",s1);
return 0;
}
}
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...