蒟蒻的代码
  • 板块P1576 最小花费
  • 楼主FdogJ
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/12/20 22:18
  • 上次更新2023/10/24 07:05:06
查看原帖
蒟蒻的代码
820929
FdogJ楼主2022/12/20 22:18

装最小值minn double定成了int(乐

# include <bits/stdc++.h>
using namespace std;
double dis[5000]={0};
double a[5000][5000];
int f[5000]={0};
int k,minn;
int n,m;
int A,B;
void init()
{
	int x,y,z;
    scanf("%d%d",&n,&m);
    for (int i=1;i<=m;i++)
    {
        scanf("%d%d",&x,&y);
        scanf("%lf",&a[x][y]);
        a[x][y]=(100-a[x][y])/100;
        a[y][x]=a[x][y];//建双向边 
    }
    scanf("%d%d",&A,&B);//以上为读入数据
}
void dijkstra(int A)
{
	for(int i=1;i<=n;i++)
		dis[i]=a[A][i];//把人数存进dis数组中
	dis[A]=1;
	f[A]=1;//把f数组中x的位置标记为1
	for(int i=1;i<=n-1;i++)
	{
		minn=0;
		for(int j=1;j<=n;j++)
			if(f[j]==0 && dis[j]>minn)//f数组中j的位置还没有被标记且dis数组中j大于minn的值
			{
				k=j;//就把j的值给k
				minn=dis[j];//更新minn的值
			}
		f[k]=1;//标记
		if(k==B)//如果k==y,就直接break掉,下面的程序就没有做的必要来了
			break;
		for(int j=1;j<=n;j++)
			if(f[j]==0 && dis[k]*a[k][j]>dis[j])//最为重要的一部分程序就是这里了
			dis[j]=dis[k]*a[k][j];
	}
}
int main()
{
	init();
    dijkstra(A);
    printf("%0.8lf",100/dis[B]);
    return 0; 
}
2022/12/20 22:18
加载中...