제출 #1130961

#제출 시각아이디문제언어결과실행 시간메모리
1130961LudisseyBridges (APIO19_bridges)C++20
14 / 100
78 ms7240 KiB
#include <bits/stdc++.h> #define int long long #define sz(a) (int)a.size() #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() using namespace std; vector<int> parent; vector<int> sz; int getParent(int a){ if(a==parent[a]) return a; return parent[a]=getParent(parent[a]); } void unite(int a, int b){ a=getParent(a); b=getParent(b); if(a==b) return; if(sz[b]>sz[a]) swap(a,b); sz[a]+=sz[b]; parent[b]=a; return; } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n,m,q; cin >> n >> m; parent.resize(n); sz.resize(n); vector<pair<int,pair<int,int>>> edges(m); for (int i = 0; i < m; i++) { int u,v,w; cin >> u >> v >> w; u--; v--; edges[i]={w,{u,v}}; } cin >> q; for (int i = 0; i < n; i++) { parent[i]=i; sz[i]=1; } vector<pair<int,pair<int,int>>> query(q); vector<int> out(q); for (int i = 0; i < q; i++) { int t; cin >> t; int s,mw; cin >> s >> mw; s--; query[i]={mw,{s,i}}; } sort(rall(edges)); sort(rall(query)); int l=0; for (int i = 0; i < q; i++) { int mw=query[i].first,s=query[i].second.first,j=query[i].second.second; while(l<m&&edges[l].first>=mw) { unite(edges[l].second.first,edges[l].second.second); l++; } out[j]=sz[getParent(s)]; } for (int i = 0; i < q; i++) { cout << out[i] << "\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...