제출 #1333766

#제출 시각아이디문제언어결과실행 시간메모리
1333766i271828Wind Turbines (EGOI25_windturbines)C++20
11 / 100
284 ms594056 KiB
#include <bits/stdc++.h>
#define pii pair<int,int>
#define ll long long
using namespace std;

const int MAX=1e5+5;
const int LOG=20;

struct UFDS{
	int par[MAX],sz[MAX];
	UFDS(){
		for (int i=0;i<MAX;i++) par[i]=i,sz[i]=0;
	}
	int qry(int x){
		if (x==par[x]) return x;
		return par[x]=qry(par[x]);
	}
	int mrg(int x,int y){
		x=qry(x),y=qry(y);
		if (x==y) return y;
		if (sz[x]>sz[y]) swap(x,y);
		if (sz[x]==sz[y]) sz[y]++;
		par[x]=y;
		return y;
	}
} ;

int N,M,Q;

pair<ll,pii> edg[MAX];

int main(){
	ios::sync_with_stdio(0);cin.tie(0);
	cin>>N>>M>>Q;
	assert(N<=2000&&M<=2000&&Q<=2000);
	for (int i=0;i<M;i++){
		int a,b;ll c;cin>>a>>b>>c;
		edg[i]={c,{a,b}};
	}
	sort(edg,edg+M);
	while (Q--){
		auto ud=new UFDS();
		int x,y;cin>>x>>y;
		for (int a=x;a<=y;a++) ud->mrg(x,a);
		ll tot=0;
		for (int i=0;i<M;i++){
			auto [w,pr]=edg[i];
			auto [a,b]=pr;
			if (ud->qry(a)==ud->qry(b)) continue;
			ud->mrg(a,b);
			tot+=w;
		}
		cout<<tot<<'\n';
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...