제출 #1187333

#제출 시각아이디문제언어결과실행 시간메모리
1187333inesfi다리 (APIO19_bridges)C++20
14 / 100
53 ms7336 KiB
#include<bits/stdc++.h>
using namespace std;

#define endl "\n"
#define int long long

const int TAILLEMAXI=50*1000+2,INFINI=1000*1000*1000+2;
int pere[TAILLEMAXI],taillecompo[TAILLEMAXI];
vector<tuple<int,int,int>> aretes;
int rep[TAILLEMAXI*2];

int trouver(int a){
    if (pere[a]!=a){
        pere[a]=trouver(pere[a]);
    }
    return pere[a];
}

void unir(int a,int b){
    a=trouver(a);
    b=trouver(b);
    if (a!=b){
        taillecompo[a]+=taillecompo[b];
        pere[b]=pere[a];
    }
}

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int nbnoeuds,nbaretes;
    cin>>nbnoeuds>>nbaretes;
    for (int i=0;i<nbaretes;i++){
        int a,b,p;
        cin>>a>>b>>p;
        aretes.push_back(make_tuple(-p,a,b));
    }
    int nbquest;
    cin>>nbquest;
    for (int i=0;i<nbquest;i++){
        int type,a,p;
        cin>>type>>a>>p;
        aretes.push_back({-p,INFINI+i,a});
    }
    sort(aretes.begin(),aretes.end());
    for (int i=1;i<=nbnoeuds;i++){
        pere[i]=i;
        taillecompo[i]=1;
    }
    for (auto i:aretes){
        if (get<1>(i)>=INFINI){
            rep[get<1>(i)-INFINI]=taillecompo[trouver(get<2>(i))];
        }
        else {
            unir(get<1>(i),get<2>(i));
        }
    }
    for (int i=0;i<nbquest;i++){
        cout<<rep[i]<<endl;
    }
    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...