社区讨论

求问+敲警钟—RE

P1550[USACO08OCT] Watering Hole G参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m4cqgt16
此快照首次捕获于
2024/12/06 20:39
去年
此快照最后确认于
2025/11/04 13:15
4 个月前
查看原帖
不知为什么第二的点re 把305的数据额范围开大一点就过了 求问why
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=300*300+5,inf=1e5+5;
int w[305],n,p[305][305];
int cnt=0;
long long ans=0;
int water[3050],f[3050],well[3005];//这改了一下
struct edge{
	int start,end,w;
}e[N];
bool cmp(edge x,edge y){
	return x.w<y.w;
}
int getf(int x){
	if(f[x]==x) return x;
	else return f[x]=getf(f[x]); 
}
void graft(int x,int y){
	int t1=getf(x),t2=getf(y);
	if(t1!=t2){
		f[t1]=t2;
	}
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>w[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>p[i][j];
			if(i==j) continue;
			e[++cnt].start=i;e[cnt].end=j;e[cnt].w=p[i][j];
		}
	}
	f[n+1]=n+1;
	for(int i=1;i<=n;i++){
		f[i]=i;
		e[++cnt].start=n+1;e[cnt].end=i;e[cnt].w=w[i];
		e[++cnt].start=i;e[cnt].end=n+1;e[cnt].w=w[i];
	}
	sort(e+1,e+1+cnt,cmp);
	for(int i=1;i<=cnt;i++){
		
		if(getf(e[i].start)!=getf(e[i].end)){
			graft(e[i].start,e[i].end);
			ans+=e[i].w;
		}			
	}
	cout<<ans;
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...