#include<cstdio> #include<iostream> #include<cstring> #include<vector> #include<set> #include<list> #include<string> #include<queue> using namespace std; vector<int>pset(100); vector< pair<int,int> >disjoint_set; void init_set(int n) { for(int i=1;i<=n;i++) pset[i]=i; } int find_set(int i) { return (pset[i]==i)? i: (pset[i]=find_set(pset[i])); } bool is_same_set(int i,int j) { return (find_set(i)==find_set(j)); } void union_set(int i,int j) { int u=find_set(i);int v=find_set(j); pset[u]=v; //cout<<u<<" "<<v<<endl; disjoint_set.push_back(make_pair(i,j)); } int main() { freopen("c:\\temp\\in.txt","r",stdin); priority_queue< pair<int,pair<int,int> > > my_graph; int vertics,edges; printf("Enter the number of vertics and edges: "); cin>>vertics>>edges; printf("Enter the edges: \n"); for(int i=1;i<=edges;i++) { int u,v,w; cin>>u>>v>>w; my_graph.push(make_pair(-w,(make_pair(u,v)))); } init_set(vertics); int total=0; while(!my_graph.empty()) { pair<int, pair<int,int> >fron=my_graph.top(); my_graph.pop(); int u=fron.second.first; int v=fron.second.second; int check=is_same_set(u,v); //cout<<"find"<<endl; if(!check) { total=total-fron.first; union_set(u,v); //printf("fff %d %d\n",u,v); } } for(vector< pair<int,int> >:: iterator it=disjoint_set.begin();it!=disjoint_set.end();it++) { cout<<it->first<<" "<<it->second; cout<<endl; } cout<<"The minimum weight is: "; cout<<total<<endl; return 0; }
বুধবার, ১ জানুয়ারী, ২০১৪
এতে সদস্যতা:
মন্তব্যগুলি পোস্ট করুন (Atom)
0 comments:
একটি মন্তব্য পোস্ট করুন