#include #include #include using namespace std; const int INF=2*1000*1000*1000+5; // ثابتی بسیار بزرگ که از هر ورودی بزرگ‌تر باشد const int N=1000; // حداکثر تعداد راس‌ها int n,m; //به ترتیب تعداد راس‌ها، تعداد یال‌ها int min_e[N]; // کم‌ترین فاصله‌ی هر راس تا راس‌های انتخاب شده int sel_e[N]; // نزدیک‌ترین راس از بین راس‌های انتخاب شده vector > ans; // پشته‌ای که جواب را نگه می‌دارد vector > V[N]; // وزن و شماره راس‌هایی که به آن یال دارد bool find_mst(){ fill_n(min_e,n,INF); // مقدار دهی اولیه fill_n(sel_e,n,-1); // مقدار دهی اولیه fill_n(used,n,false); // مقدار دهی اولیه min_e[0]=0; // صفر قرار می‌دهیم تا ابتدا راس صفر(یک) انتخاب شود set < pair > q; // داده‌ساختاری که فاصله هر راسی که به مجومه انتخاب شده راه دارد را نگه می‌دارد q.insert (make_pair (0, 0)); for (int i=0; isecond; // کوچک‌ترین عضو یعنی نزدیک‌ترین عضو است set عضو ابتدایی q.erase (q.begin()); if (sel_e[v] != -1) ans.push_back(make_pair(sel_e[v],v)); for (int j=0; j> n>>m; for(int i=0; i>a>>b>>w; // به ترتیب ۲ راس و سپس وزن یال V[a-1].push_back(make_pair(b-1,w)); // است n-1 یکی کم می‌کنیم چون بازه‌ی معتبر ما صفر تا V[b-1].push_back(make_pair(a-1,w)); // است n-1 یکی کم می‌کنیم چون بازه‌ی معتبر ما صفر تا } if(find_mst()==false) cout << "No MST!\n"; }