Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<stdio.h>
- #include<algorithm>
- using namespace std;
- typedef struct{
- int parent;
- int rank;
- }subset;
- typedef struct{
- int u;
- int v;
- int w;
- }edge;
- bool mycmp(edge a,edge b){
- return a.w < b.w;
- }
- int find(int x,subset set[]){
- if(set[x].parent == x){
- return x;
- }
- return set[x].parent = find(set[x].parent,set);
- }
- void unions(int x,int y,subset set[]){
- int rootx = find(x,set);
- int rooty = find(y,set);
- if(set[rootx].rank > set[rooty].rank){
- set[rooty].parent = rootx;
- }
- else if(set[rootx].rank < set[rooty].rank){
- set[rootx].parent = rooty;
- }else{
- set[rootx].parent = rooty;
- set[rooty].rank++;
- }
- }
- int main()
- {
- int v,e;
- // cin>>v>>e;
- scanf("%d%d",&v,&e);
- subset set[v+1];
- for(int i=0;i<=v;i++){
- set[i].parent = i;
- set[i].rank = 0;
- }
- edge alledge[e];
- for(int i=0;i<e;i++){
- int u,v,w;
- // cin>>u>>v>>w;
- scanf("%d%d%d",&u,&v,&w);
- alledge[i] = {u,v,w};
- }
- sort(alledge,alledge+e,mycmp);
- for(int i=0;i<e;i++){
- int x = alledge[i].u;
- int y = alledge[i].v;
- if(find(x,set) != find(y,set)){ // not cycle
- // cout<<x<<" "<<y<<endl;
- printf("%d %d\n",x,y);
- unions(x,y,set);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment