F WA*11 TLE*4 求调
  • 板块学术版
  • 楼主jhdrgfj
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/7/27 21:43
  • 上次更新2024/7/28 06:20:16
查看原帖
F WA*11 TLE*4 求调
776582
jhdrgfj楼主2024/7/27 21:43
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,ans,fa[500005],m[500005],c[500005],q;
struct node{
	int l,r,c,id;
}a[500005];
bool cmp(node x,node y)
{
	return x.c<y.c;
}
int get(int x)
{
	if (x==fa[x]){
		return x;
	}
	return fa[x]=get(fa[x]);
}
void mg(int x,int y,int v)
{
	if (get(x)!=get(y)){
		fa[get(y)]=get(x);
		ans+=v;
	}
}
int gm(int x)
{
	if (x==m[x]){
		return x;
	}
	return m[x]=gm(m[x]);
}
signed main()
{
	cin>>n>>q;
	for (int i=1;i<=q;i++){
		fa[n+i]=n+i;
	}
	for (int i=1;i<=n;i++){
		m[i]=i;
	}
	for (int i=1;i<=q;i++){
		cin>>a[i].l>>a[i].r>>a[i].c;
		a[i].id=n+i;
	}
	sort(a+1,a+q+1,cmp);
	for (int i=1;i<=q;i++){
		for (int j=a[i].l;j<=a[i].r;j++){
			
				if (c[j]){
					mg(a[i].id,c[j],a[i].c);

					j=gm(j);
					
				}else{
					if (j!=a[i].l){
						m[gm(j-1)]=gm(j);
					}
					c[j]=a[i].id;
					ans+=a[i].c;
				}
		}
	}
	int df=0;
	for (int i=n+1;i<=n+q;i++){
		if (fa[i]==i){
			df++;
		}
	}
	cout<<(df==1?ans:-1);
}

rt。

2024/7/27 21:43
加载中...