Submission #1360898

#TimeUsernameProblemLanguageResultExecution timeMemory
1360898yyc000123Wind Turbines (EGOI25_windturbines)C++20
11 / 100
4093 ms8516 KiB
#include<bits/stdc++.h>
using namespace std ;
typedef long long ll ;
#define F first
#define S second
#define g0 get<0>
#define g1 get<1>
#define g2 get<2>
const int N = 1e5+5 ;
const int M = 1e5+5 ;
const int Q = 2e5+5 ;
int n , m , q , par[N] , mark[N] ;
vector<pair<int,int>> nei[N] ;
vector<tuple<int,int,int>> edge ;

int main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) ;
    cin >> n >> m >> q ;
    for(int i=0 ; i<m ; i++){
        int a , b , c ; cin >> a >> b >> c ;
        nei[a].push_back({b,c}) ; nei[b].push_back({a,c}) ;
        edge.push_back({c,a,b}) ;
    }
    sort(edge.begin(),edge.end()) ;
    auto p = [&] (int k , auto &self) -> int {
        if(par[k]<0) return k ;
        else return par[k] = self(par[k],self) ;
    };
    while(q--){
        int le , ri ; cin >> le >> ri ;
        memset(par,-1,sizeof(par)) ;
        memset(mark,0,sizeof(mark)) ;
        for(int i=le ; i<=ri ; i++) mark[i]=1 ;
        ll sum = 0 ;
        for(int i=0 ; i<m ; i++){
            int u = g1(edge[i]) , v = g2(edge[i]) , pu = p(u,p) , pv = p(v,p) ;
            if(pu==pv || (mark[pu] && mark[pv])) continue ;
            sum += g0(edge[i]) ;
            if(mark[pu]) par[pu]+=par[pv] , par[pv]=pu ;
            else par[pv]+=par[pu] , par[pu]=pv ;
        }
        cout << sum << '\n' ;
    }
    return 0 ;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...