제출 #934028

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

int comp[50005];

int fin(int v) {

    if(comp[v] < 0) {
        return v;
    }

    comp[v] = fin(comp[v]);
    return comp[v];
}

void me(int u, int v) {

    u = fin(u);
    v = fin(v);

    if(u == v) return;

    if(comp[u] < comp[v]) swap(u, v);

    comp[v] += comp[u];
    comp[u] = v;
}

bool cmp(pair<pair<int, int>, pair<int, int>> a, pair<pair<int, int>, pair<int, int>> b) {

	if(a.second.second > b.second.second) return false;

	return true;
}

pair<int, pair<int, int>> ed[100005];

pair<pair<int, int>, pair<int, int>> que[100005];

int main() {
	
	int n, m, a, b, c, q;

	cin >> n >> m;

	 for(int i=0; i<=n; i++) {
        comp[i] = -1;
    }

	for(int i=0; i<m; i++) {
		cin >> a >> b >> c;

		ed[i] = {c, {a, b}};
	}

	sort(ed, ed+m, greater<pair<int, pair<int, int>>>());

	ed[m] = {-1, {1, 1}};

	cin >> q;

	int op;

	for(int i=0; i<q; i++) {
		cin >> op >> a >> b;

		que[i] = {{b, 0}, {a, i}};
	}

	sort(que, que+q, greater<pair<pair<int, int>, pair<int, int>>>());

	int j=0; 

	for(int i=0; i<q; i++) {

		while(ed[j].first >= que[i].first.first) {
			me(ed[j].second.first, ed[j].second.second);
			j++;
		}

		que[i].first.second = -comp[fin(que[i].second.first)];
	}

	sort(que, que+q, cmp);

	for(int i=0; i<q; i++) {
		cout << que[i].first.second << "\n";
	}

	/*for(int i=0; i<=n; i++) {
		cout << comp[i] << " ";
	}*/
	
}
#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...