Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <algorithm>
- #define NMAX 120004
- using namespace std;
- ifstream fin("plimbare1.in");
- ofstream fout("plimbare1.out");
- int n, m, comp[NMAX]; /// comp - marcheaza componentele conexe; initial, toate vf = izolate
- struct muchii {
- int a, b;
- int cost;
- } mu[NMAX], rez[NMAX];
- void citire() {
- fin >> n >> m;
- int t = 0;
- for(int i = 1; i <= m; i++){
- fin >> t;
- if(t == 1){
- fin >> mu[i].a >> mu[i].b;
- mu[i].cost = 0;
- }
- else
- fin >> mu[i].a >> mu[i].b >> mu[i].cost;
- }
- }
- int compar(muchii x, muchii y) {
- return (x.cost < y.cost);
- }
- int kruskal() {
- for(int i = 1; i <= n; i++) comp[i] = i;
- int cost = 0;
- int ms = 0; /// nr muchii selectate
- int ctr = 0;
- while(ms != n - 1) {
- do {
- ctr++;
- } while(comp[mu[ctr].a] == comp[mu[ctr].b]);
- ms++;
- int a1 = comp[mu[ctr].a];
- int b1 = comp[mu[ctr].b];
- int mini, maxi;
- if(a1 > b1) {
- mini = b1;
- maxi = a1;
- }
- else {
- mini = a1;
- maxi = b1;
- }
- ///rez[ms] = mu[ctr];
- cost += mu[ctr].cost;
- for(int i = 1; i <= n; i++)
- if(comp[i] == maxi)
- comp[i] = mini;
- }
- fout << cost << '\n';
- ///for(int i = 1; i <= n - 1; i++)
- /// fout << mu[i].a << ' ' << mu[i].b << '\n';
- }
- int main()
- {
- citire();
- sort(mu + 1, mu + m + 1, compar);
- kruskal();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement