2025 3.6 总结

为什么我老范一些“高级”错误啊

灾后重建输出没写调了半天

P1119 灾后重建

题目传送门

样例:

4 5
1 2 3 4
0 2 1
2 3 1
3 1 2
2 1 4
0 3 5
4
2 0 2
0 1 2
0 1 3
0 1 4

第1天:

第2天:

第3天:

第4天:

每次有新的可经过的点,就以新的可经过的点为中转单进行floyd

void floyd(int k)
{
	for(int i = 1;i < n;i ++)
	{
		for(int j = i + 1;j <= n;j ++)
		{
			dp[j][i] = dp[i][j] = min(dp[i][j],dp[i][k] + dp[k][j]);
		}
	}
}

P1364 医院设置

这道题我们可以对每个点进行dijkstra,再把\sum每个点离他的距离*这个点的人数就是在这个点建医院所有居民所走的路程之和,取最小值即可。

void dijkstra(int s)
{
	memset(dis,0x3f,sizeof(dis));
	memset(f,false,sizeof(f));	
	dis[s] = 0;
	for(int i = 1;i <= n;i ++)
	{
		int minn = 0x3f3f3f3f,x;
		for(int j = 1 ; j <= n ; j ++)
		{
			if(dis[j] < minn && !f[j])
			{
				minn = dis[j];
				x = j;
			}
		}
		f[x] = true;
		for(auto j : v[x])
		{
			dis[j] = min(dis[j],dis[x] + 1);
		}
	}
	int sum = 0;
	for(int i = 1;i <= n;i ++)
	{
		sum += w[i] * dis[i];
	}
	minn = min(minn,sum);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值