Submission #1333584

#TimeUsernameProblemLanguageResultExecution timeMemory
1333584sporknivesWind Turbines (EGOI25_windturbines)C++20
11 / 100
4091 ms11372 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
typedef pair<int,int> pii;

int n;
vector<int> par, rnk;
void init(int n) {
	par.resize(n); for(int i=0;i<n;i++) par[i]=i;
	rnk.resize(n); for(int i=0;i<n;i++) rnk[i]=1;
}

int root(int n) {
	if(par[n]==n) return n;
	else par[n] = root(par[n]);
	return par[n];
}

void merge(int a, int b) {
	int pa = root(a), pb = root(b);
	if(rnk[pa] >= rnk[pb]) {
		par[pb]=pa;
		if(rnk[pa]==rnk[pb]) rnk[pa]++;
	}
	else {
		par[pa]=pb;
	}
}

bool sameSet(int a, int b) {
	return root(a) == root(b);
}

int find_mst(vector<pair<int,pii>> edges, vector<int> src) {
	init(n);
	for(int i=0;i<src.size()-1;i++) {
		merge(src[i],src[i+1]);
	}
	
	//sort(edges.begin(),edges.end());
	vector<pii> mst;
	int cost=0;
	for(pair<int,pii> x: edges) {
		int w = x.first, a = x.second.first, b = x.second.second;
		if(!sameSet(a,b)) {
			mst.push_back({a,b});
			cost+=w;
			merge(a,b);
		}
	}
	
	return cost;
}

signed main() {
	int m,q; cin>>n>>m>>q;
	vector<pair<int,pii>> edges(m);
	for(int i=0;i<m;i++) {
		int a,b,w; cin>>a>>b>>w;
		edges[i] = {w,{a,b}};
	}
	sort(edges.begin(),edges.end());
	for(int i=0;i<q;i++) {
		int l,r; cin>>l>>r;
		vector<int> src;
		for(int j=l;j<=r;j++) {
			src.push_back(j);
		}
		cout<<find_mst(edges, src)<<"\n";
	}
	return 0;
}
#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...