Poj 1251 Jungle Roads

最小生成樹 Kruskal 

oj有bug

RE3次因爲scanf

第一次用cin輸入

沒問題

貌似是輸入的問題

以上

#include<stdio.h>
#include<vector>
#include<algorithm>
#include<math.h>
#define MAX 800
#include<iostream>
using namespace std;
struct edge{
	int p,q;
	int w;
	bool operator < (const edge& b)const {
		return w<b.w;
		}
	};
std::vector<edge>L;
int ft[MAX];
void in_ft(int n){
	int i;
	for(i=1;i<=n;i++)ft[i]=i;
	}
int find(int x){
	int t=x,temp;
	while(ft[x]!=x)x=ft[x];
	while(t!=x){
		temp=ft[t];
		ft[t]=x;
		t=temp;
		}
	return x;
	}
void merge(int root1,int root2){
	int fr1=find(root1);
	int fr2=find(root2);
	ft[fr1]=fr2;
	}
int main(){
	int z=0,n;
	while(cin>>n){
	    if(!n)break;
		L.clear();
		in_ft(n);
		int i,j;
		for(i=1;i<n;i++){
            char x;int t;
            cin>>x>>t;
            for(j=1;j<=t;j++){
                int y;
                cin>>x>>y;
                L.push_back( (edge){i,x+1-'A',y} );
                }
            }
        sort(L.begin(),L.end());
        int res=0;
        for(i=0;i<L.size();i++){
            if(find(L[i].p)!=find(L[i].q)){merge(L[i].p,L[i].q);res+=L[i].w;}
            }
        printf("%d\n",res);
		}
	return 0;
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章