首页 > 代码库 > POJ - 1251 Jungle Roads(最小生成树)
POJ - 1251 Jungle Roads(最小生成树)
题意:求连通所有路需要修的最短路径。
和上次的hdu1233差不多的题目,只不过这里要把输入的字母转换成数字,这样会方便很多。
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 struct TnT{ 6 int x1; 7 int x2; 8 int val; 9 }T[1111]; 10 11 int Father[30]; 12 char arr[27]="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 13 14 int find(int x){return x==Father[x]?x:Father[x]=find(Father[x]);} 15 16 void Union(int x,int y){ 17 int fx=find(x),fy=find(y); 18 if(fx!=fy) Father[fx]=fy; 19 } 20 21 bool cmp(TnT a,TnT b){ 22 return a.val<b.val; 23 } 24 25 int renum(char m){ 26 for(int i=0;i<26;i++){ 27 if(m==arr[i]) 28 return i+1; 29 } 30 } 31 32 int main(){ 33 int n,l,r,cnt; 34 char m; 35 while(cin>>n&&n!=0){ 36 int t=0,sum=0; 37 for(int i=1;i<=n;i++) Father[i]=i; 38 for(int i=1;i<n;i++){ 39 cin>>m>>cnt; 40 l=renum(m); 41 for(int i=0;i<cnt;i++){ 42 cin>>m>>T[t].val; 43 r=renum(m); 44 T[t].x1=l,T[t].x2=r; 45 t++; 46 } 47 } 48 sort(T,T+t,cmp); 49 for(int i=0;i<t;i++){ 50 if(find(T[i].x1)!=find(T[i].x2)){ 51 Union(T[i].x1,T[i].x2); 52 sum+=T[i].val; 53 } 54 } 55 cout<<sum<<endl; 56 } 57 return 0; 58 }
POJ - 1251 Jungle Roads(最小生成树)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。