Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- using pii = pair<int,pair<int,int>> ;
- using pi = pair<int,int>;
- vector <pii> g;
- int n,w;
- int parent[201],rnk[201];
- int root(int u){
- if(parent[u]==u) return u;
- return parent[u]=root(parent[u]);
- }
- void mrg(int u,int v){
- u=root(u);
- v=root(v);
- if(rnk[u]<rnk[v]){
- rnk[v]+=rnk[u];
- parent[u]=v;
- }
- else {
- rnk[u]+=rnk[v];
- parent[v]=u;
- }
- }
- int mn( priority_queue <pii,vector<pii>,greater<pii>> pq ){
- int dis=0,start=-1;
- for(int i=1;i<=n;i++){
- parent[i]=i;
- rnk[i]=1;
- }
- while(pq.size()>0){
- int u,v,w;
- w=pq.top().first;
- u=pq.top().second.first;
- v=pq.top().second.second;
- pq.pop();
- u=root(u);
- v=root(v);
- if(u==v) continue;
- if(start==-1) start=u;
- mrg(u,v);
- dis+=w;
- if(rnk[root(start)]==n) return dis;
- }
- return -1;
- }
- int main(){
- scanf("%d%d",&n,&w);
- priority_queue <pii,vector<pii>,greater<pii>> pq;
- for(int i=1;i<=w;i++){
- int u,v,w;
- scanf("%d%d%d",&u,&v,&w);
- pq.push({w,{u,v}});
- printf("%d\n",mn(pq));
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement