제출 #1005142

#제출 시각아이디문제언어결과실행 시간메모리
1005142vjudge1다리 (APIO19_bridges)C++17
0 / 100
210 ms7396 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long int const N=50005; int const mod=1e9+7; vector<int> com[N]; int rep[N]; int ans[N*2]; int main(){ int n,m; cin>>n>>m; for(int i=0;i<=n;i++){ com[i].push_back(i); rep[i]=i; } array<int,3> edge[m]; for (int i = 0; i < m; ++i) { int a,b,w; cin>>a>>b>>w; edge[i]={w,a,b}; } sort(edge,edge+n); reverse(edge,edge+n); // reverse() int q; cin>>q; array<int,3> qr[q]; for(int i=0;i<q;i++){ int t,a,b; cin>>t>>a>>b; qr[i]={b,a,i}; } sort(qr,qr+n); reverse(qr,qr+n); int cur=0; for (int i = 0; i < m; ++i) { while(cur<q && qr[cur][0]>edge[i][0]){ ans[qr[cur][2]]=com[rep[qr[cur][1]]].size(); cur++; } int u=rep[edge[i][1]]; int v=rep[edge[i][2]]; if(u!=v){ if(com[u].size()<com[v].size()) swap(u,v); for(int e:com[v]){ com[u].push_back(e); rep[e]=u; } com[v].clear(); } } while(cur<q){ ans[qr[cur][2]]=com[rep[qr[cur][1]]].size(); cur++; } for (int i = 0; i < q; ++i) cout<<ans[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...