蓝桥杯-城市建设

读完题就知道是生成树的题,然后注意一下就是,找完一颗树之后,遍历剩下的边,小于0就在加上即可。先找没河的,再加上有河的再跑一遍克鲁斯卡尔就好了。

#include<bits/stdc++.h>

#define LL long long
#define fi first
#define se second
#define mp make_pair
#define pb push_back

using namespace std;

LL gcd(LL a,LL b){return b?gcd(b,a%b):a;}
LL lcm(LL a,LL b){return a/gcd(a,b)*b;}
LL powmod(LL a,LL b,LL MOD){LL ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
int n,m;

const int N=1e4+34;
int f[N];
LL res,ans;
struct uzi
{
	int s,t,w;
	uzi(){}
	uzi(int A,int B,int C){s=A;t=B;w=C;}
	bool operator < (const uzi &t)const{
		return w<t.w;
	}
};
vector<uzi>v;
int find(int x){
	return x==f[x]?x:f[x]=find(f[x]);
}
int main(){
	// freopen("in.txt","r",stdin);
	 ios::sync_with_stdio(false);
	cin>>n>>m;
	res=1e18;
	for(int i=1;i<=n+1;i++)f[i]=i;
	for(int i=1;i<=m;i++){
		int s,t,w;
		cin>>s>>t>>w;
		v.pb(uzi(s,t,w));
	}
	int cnt=0,pos=m;
	sort(v.begin(),v.end());
	for(int i=0;i<v.size();i++){
		uzi k=v[i];
		int x=find(k.s),y=find(k.t);
		if(x==y&&k.w>=0)continue;
		else if(x==y){ans+=k.w;continue;}
		f[y]=x;
		ans+=k.w;
		if(++cnt==n-1){pos=i;break;}
		
	}	
	for(int i=pos+1;i<v.size();i++){
		if(v[i].w<0)ans+=v[i].w;
		else break;
	}
	if(cnt>=n-1)res=ans;
	// cout<<res<<endl;
	pos=m+n;
	for(int i=1;i<=n;i++){
		int f;
		cin>>f;
		if(f==-1)continue;
		v.pb(uzi(n+1,i,f));
	}
	cnt=ans=0;
	for(int i=1;i<=n+1;i++)f[i]=i;
	sort(v.begin(),v.end());
	for(int i=0;i<v.size();i++){
		uzi k=v[i];
		int x=find(k.s),y=find(k.t);
		if(x==y&&k.w>=0)continue;
		else if(x==y){ans+=k.w;continue;}
		f[y]=x;
		ans+=k.w;
		if(++cnt==n){pos=i;break;}
	}
	for(int i=pos+1;i<v.size();i++){
		if(v[i].w<0)ans+=v[i].w;
		else break;
	}
	if(cnt>=n)res=min(res,ans);
	cout<<res<<endl;
	return 0;
}
全部评论

相关推荐

07-23 22:01
已编辑
梧州学院 Java
第一次面试,广东小厂,太紧张了,感觉机会不是很大,很多地方说得不好。面了二十分钟接下来是面试问的问题1.介绍一下项目,有什么功能太紧张了,回答有点卡壳2.了解的数据库有哪些,说一下MySQL的索引优化我说了一下索引的知识,但是没了解过索引优化,然后他让我自由发挥说一下我了解的MySQL知识,后面讲了数据库的事务,隔离级别,索引的b+树,太紧张,很多都没说出来,卡住了,让他下一个问题。3.spring&nbsp;cloud里面有哪些组件跟组件的作用讲了,nacos,sentinel,gateway,负载均衡,openfeign4.MinIO做文件存储,如果有十个g的上传,应该如何提高上传和下载的效率这个不会,没了解过,只说了用mq提高响应速度5.redis在项目中起到什么样的作用缓存热门信息,做排行榜,redis分布式锁做限制请求6.redis怎么保证跟数据库一致性这个答得不好7.怎么提高接口的响应速度只说了慢sql和mq8.怎么理解Java中的多态举例只说了重载跟重写9.介绍一下springioc和aop10.bean的生命周期这两个还可以八股问完了,我问面试评价,说我太紧张了,可以放松一些(确实第一次面试,听录音回放全程在鹅鹅鹅饿,感觉过不了),问我能不能接受出差,可能去深圳做技术支持,问我多久到岗,问他主要工作内容是负责开发吗,他说可能有部分时间不在公司要去出差。应该是挂了,叫我过两天等通知。
想当java高手:报喜,面试已经通过了,准备下周一入职,月薪3000
查看10道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务