ZOJ 2326 Tangled in Cables
来源:互联网 发布:java主方法怎么写 编辑:程序博客网 时间:2024/06/13 23:28
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <map>
using namespace std;
bool vis[10010];
bool e[1010][1010];
double g[1010][1010];
double l[10010];//{l[i]存放顶点i到当前已建成的生成树中任意一顶点j的权值g[i][j]的最小值}
int main()
{
double len;
int n,m;
int i,j,k;
scanf("%lf",&len);
string str;
map<string,int> ma;
memset(vis,1,sizeof(vis));
memset(e,false,sizeof(e));
memset(g,0,sizeof(g));
memset(l,0x7f,sizeof(l));
l[1]=0;
ma.clear();
scanf("%d",&n);
for( i = 1; i<=n; i++)
{
cin>>str;
ma[str]= i;
}
scanf("%d",&m);
for( i = 1; i<=m; i++)
{
string str1,str2;
double dis;
cin>>str1;
cin>>str2;
scanf("%lf",&dis);
g[ma[str1]][ma[str2]] = g[ma[str2]][ma[str1]] = dis;
e[ma[str1]][ma[str2]] = e[ma[str2]][ma[str1]] = true;
}
for (i=0;i<n;i++)
{
int k=0;
for (j=1;j<=n;j++) //找一个未加入到生成树中的顶点,记为k,要求k到当前生成树的代价量最小
if (vis[j] && l[j]<l[k])
k=j;
//cout<<k<<"l[k]"<<l[k]<<endl;
vis[k]=false; //顶点k加入生成树
for (j=1;j<=n;j++) //找到生成树中的顶点j,要求g[k][j]最小
if (vis[j] && e[k][j] && g[k][j]<l[j])
{
l[j]=g[k][j];
}
}
double total = 0;
for (i=1;i<=n;i++)
total += l[i];
if(total <= len)
printf("Need %.1lf miles of cable\n",total);
else
printf("Not enough cable\n");
return 0;
}
#include <stdio.h>
#include <string.h>
#include <map>
using namespace std;
bool vis[10010];
bool e[1010][1010];
double g[1010][1010];
double l[10010];//{l[i]存放顶点i到当前已建成的生成树中任意一顶点j的权值g[i][j]的最小值}
int main()
{
double len;
int n,m;
int i,j,k;
scanf("%lf",&len);
string str;
map<string,int> ma;
memset(vis,1,sizeof(vis));
memset(e,false,sizeof(e));
memset(g,0,sizeof(g));
memset(l,0x7f,sizeof(l));
l[1]=0;
ma.clear();
scanf("%d",&n);
for( i = 1; i<=n; i++)
{
cin>>str;
ma[str]= i;
}
scanf("%d",&m);
for( i = 1; i<=m; i++)
{
string str1,str2;
double dis;
cin>>str1;
cin>>str2;
scanf("%lf",&dis);
g[ma[str1]][ma[str2]] = g[ma[str2]][ma[str1]] = dis;
e[ma[str1]][ma[str2]] = e[ma[str2]][ma[str1]] = true;
}
for (i=0;i<n;i++)
{
int k=0;
for (j=1;j<=n;j++) //找一个未加入到生成树中的顶点,记为k,要求k到当前生成树的代价量最小
if (vis[j] && l[j]<l[k])
k=j;
//cout<<k<<"l[k]"<<l[k]<<endl;
vis[k]=false; //顶点k加入生成树
for (j=1;j<=n;j++) //找到生成树中的顶点j,要求g[k][j]最小
if (vis[j] && e[k][j] && g[k][j]<l[j])
{
l[j]=g[k][j];
}
}
double total = 0;
for (i=1;i<=n;i++)
total += l[i];
if(total <= len)
printf("Need %.1lf miles of cable\n",total);
else
printf("Not enough cable\n");
return 0;
}
0 0
- zoj 2326 Tangled in Cables
- zoj 2326 Tangled in Cables
- ZOJ 2326 Tangled in Cables
- ZOJ 2326 Tangled in Cables
- zoj 2326 Tangled in Cables【kruskal】
- zoj 2326 || poj 2075 Tangled in Cables(MST)
- zoj 2326 Tangled in Cables 最小生成树
- ZOJ 2326 Tangled in Cables(最小生成树--prime)
- zoj 2326 Tangled in Cables【最小生成树 kruskal && prim】
- Prim_poj2075 Tangled in Cables
- poj_2075 Tangled in Cables
- zoj_2326 Tangled in Cables
- POJ2075--Tangled in Cables
- poj2075 Tangled in Cables
- 2075:Tangled in Cables
- POJ 2075 Tangled in Cables
- poj 2075 Tangled in Cables
- POJ 2075 Tangled in Cables
- 1606: [Usaco2008 Dec]Hay For Sale 购买干草
- ZOJ 3787 Access System
- ZOJ 3778 Talented Chef
- linux mysql 密码重设
- 基于MonkeyRunner的批量渠道包自动化测试
- ZOJ 2326 Tangled in Cables
- 哈夫曼编码
- 1617: [Usaco2008 Mar]River Crossing渡河问题
- Java中toArray的用法探究
- 最优化第二讲——一维搜索法(黄金分割法和java实现)
- c++使用参数默认值实现默认构造函数
- Swift简单值练习
- 黑马程序员---Java集合框架
- 程序员如何有效交流?