HDU 1301 Jungle Roads Kruskal求解
2015-04-25 20:29
417 查看
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66965#problem/M
题意:热带的一个国家还是啥的,需要维护network,求最小维护费用问题,几乎就是最小生成树意思。
思路:Kruskal求解,没啥亮点,可以用map方便的把字符整型化。也可以用字符减去'A'。
代码:
题意:热带的一个国家还是啥的,需要维护network,求最小维护费用问题,几乎就是最小生成树意思。
思路:Kruskal求解,没啥亮点,可以用map方便的把字符整型化。也可以用字符减去'A'。
代码:
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<map> using namespace std; struct edge{ int u,v,w; bool operator< (const edge &a)const{ return w<a.w; } }E[900]; map<char,int> mp;//把字符整型化 int N,tot; int pre[30]; int find(int x){ int t=x; while(t!=pre[t]) t=pre[t]; while(x!=t) pre[x]=t,x=pre[x]; return t; } void Kruskal(){ for(int i=0;i<=26;i++) pre[i]=i; int sum=0,cnt=1; for(int i=0;i<tot;i++){ int u=E[i].u,v=E[i].v,w=E[i].w; int fu=find(u),fv=find(v); if(fu==fv) continue; pre[fu]=fv;sum+=w;cnt++; if(cnt==N) break; } cout<<sum<<endl; } int main(){ //freopen("D:\\in.txt","r",stdin); for(int i=0;i<26;i++) mp['A'+i]=i; while(cin>>N && N){ char ch; int k,t; tot=0; for(int i=0;i<N-1;i++){ cin>>ch>>k; for(int j=0;j<k;j++){ cin>>ch>>t; E[tot++]=(edge){i,mp[ch],t}; } } sort(E,E+tot); Kruskal(); } return 0; }
相关文章推荐
- hdu 1301 Jungle Roads &&poj 1251 (prim 或者kruskal)
- hdu_1301 Jungle Roads
- HDU 1301 Jungle Roads
- hdu 1301 Jungle Roads<java><prime>
- HDU 1301:Jungle Roads【Prim】
- hdu 1301 Jungle Roads poj
- Jungle Roads HDU - 1301 (最小生成树 prim)
- (step6.1.6)hdu 1301(Jungle Roads——最小生成树)
- hdu1301——Jungle Roads——最小生成树
- HDU 1301 Jungle Roads
- hdu 1301 prime Jungle Roads
- HDU Jungle Roads 1301 最小生成树、
- HDU 1301 Jungle Roads(最小生成树Kruskal)
- HDU 1301 Jungle Roads (Kruskal求最小生成树)
- HDU 1301--Jungle Roads 【Kruskal】
- HDU 1875 畅通工程再续 Kruskal求解
- hdu 1301(最小生成树kruskal)
- hdu 1102 kruskal Constructing Roads
- [POJ 1251]Jungle Roads Kruskal
- hdu 1301 Jungle Roads(最小生成树kruskal)