POJ 1125

来源:互联网 发布:js获取文件大小 编辑:程序博客网 时间:2024/05/20 13:17

  【题意】:给出若干个股票经纪人以及与之有联系的其他经纪人,并给出该经纪人传播消息给与他有联系的人所需的时间,让你选出一个人作为消息的起始传播人,使得消息传播到所有经纪人耳朵里所需的时间最小。

   【思路】:根据给出的每个经纪人以及传播时间可以构建出一张图,每对有联系的人之间有一条边,边的权重为传播时间,然后在这张图上求最小生成树即可。

   【代码】:

#include<stdio.h>

#include<string>

using namespace std;

int map[102][102];

int temp[102];

int n;

void floyd()

{

memset(temp,-1,sizeof(temp));

int i,j,k;

for(k=1;k<=n;k++)

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

if(map[i][j]>map[i][k]+map[k][j])

map[i][j]=map[i][k]+map[k][j];

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

if(temp[i]<map[i][j])

temp[i]=map[i][j];

int m=1<<30;

for(i=1;i<=n;i++)

if(m>temp[i])

{

m=temp[i];

j=i;

}

printf("%d %d\n",j,m);

}

int main()

{

int t,d,m,i;

while(scanf("%d",&n)&&n)

{

memset(map,10000,sizeof(map));

for(i=1;i<=n;i++)

map[i][i]=0;

 for(i=1;i<=n;i++)

{

scanf("%d",&t);

while(t--)

{

scanf("%d%d",&d,&m);

map[i][d]=m;

}

}

 floyd();

}

return 0;

}

原创粉丝点击